完美解决Informix的中文乱码问题
 Informix是IBM旗下的一款数据库,要不是这个项目需要,估计这辈子我都不知道居然还有这么一款数据库。想来公司的项目遍布全国各地,各种部署环境各种应用场景应有尽有,七七八八的问了一大堆的各项目组兄弟,居然都没人知道这玩意,可见这货有多小众化。。。

刚开始接触这玩意时完全摸不着头脑,它的设计理念和使用方法太尼玛诡异了,无论是DB2、Oracle,还是Mysql,居然没一个对应的开发经验可以直接套用到Informix上,就是找对应的文档资料都比其他数据库要费劲不少,别的不说,光这中文乱码问题,我也是费了一番功夫才折腾好。

废话不说了,解决乱码过程中的各种蛋疼暂且按下不表,直奔主题吧,先把自己的心得和解决问题的几个关键点记录一下:

关键点一:正确理解informix数据库所必须的四个基础概念。

四个语言环境的含义:

1、客户机语言环境— Client locale
客户机语言环境指定客户机应用程序用于执行读和写(I/O)操作的语言、地域和代码集。
在客户机应用程序中,I/O 操作包括读取键盘输入或要发送至数据库的数据文件,以及将数据库服务器从数据库中检索的数据写入屏幕、文件或打印机。 
通过 CLIENT_LOCALE 来设置客户机语言环境。

2、数据库语言环境— Database locale
通过 DB_LOCALE 环境变量设置的数据库语言环境指定数据库服务器用于正确解释特定数据库中语言环境相关的数据类型(NCHAR 和 NVARCHAR)所需的语言、地域和代码集。
DB_LOCALE 中指定的代码集确定哪些字符在任何字符列中都是有效的,并且确定数据库对象(如数据库、表、列和视图)的名称。
数据库服务器使用 DB_LOCALE 环境变量指定的数据库代码集将数据传入和传出数据库。

3、服务器语言环境— Server locale
数据库服务器使用 SERVER_LOCALE 环境变量指定的服务器代码集写文件(如调试和警告文件)。
但是,数据库服务器不使用服务器语言环境来写入采用 Informix 专用格式的文件(数据库和表文件)。

4、服务器处理语言环境— Server processing locale
数据库服务器使用数据库语言环境的代码集作为服务器处理语言环境的代码集 , 使用服务器处理语言环境来写入采用 Informix 专用格式的文件(数据库和表文件)。
也就是说数据库服务器使用数据库语言环境(DB_LOCALE)来写入采用 Informix 专用格式的文件(数据库和表文件)。

关键点二:引入正确的jdbc jar文件。
jar文件列表如下,jar文件至少需要这10个,缺一不可:
ifxjdbc.jar
ifxjdbc-g.jar
ifxjdbcx.jar
ifxjdbcx-g.jar
ifxlang.jar
ifxlsupp.jar
ifxsqlj.jar
ifxsqlj-g.jar
ifxtools.jar
ifxtools-g.jar

这个关键点非常有必要强调一下:理论上来说,让Informix启动起来只需要ifxjdbc.jar即可,但是没有其他的jar文件,你的中文问题永远都解决不了!老子当初就是只引入了必要的五六个jar,到最后怎么调都调不对这个乱码,就在这一个点上耗费了绝大部分的时间。

关键点三:查看当前系统下所有的数据库编码。
select * from sysmaster:sysdbslocale
该语句可以查询出当前数据库中所有database所使用的编码格式。

关键点四:书写正确的jdbc url。

JDBC URL(UTF-8编码示例):
jdbc:informix-sqli:6.1.14.38:48101/ccdb2:informixserver=ccdb;NEWCODESET=utf8,8859-1,819;CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.8859-1;

JDBC URL(GBK编码示例):
jdbc:informix-sqli:6.1.14.38:48101/ccdb2:informixserver=ccdb;NEWCODESET=GB18030-2000,8859-1,819;CLIENT_LOCALE=zh_CN.gb;DB_LOCALE=zh_CN.gb;DBDATE=mdy4;IFX_USE_STRENC=TRUE;

这个点也必须强调一下,它的重要性仅次于关键点二。在java中,我们使用的编码叫UTF-8,但在Informix中,这种编码格式的正确书写是utf8,而不是utf-8!另外,GBK编码在Informix系统下叫做gb或者GB18030-2000,你要是在url中写成GBK是识别不出来的。

关键点五:确认Informix服务器支持UTF-8格式。
使用locale -a 命令,然后检查是否支持zh_CN.UTF8(注en_US.UTF-8亦可)

关键点六:客户端连接工具的编码调整。
注:使用SecureCRT显示zh_CN.UTF8字符时,应该当在 会话选项->终端->外观 精确字体中选择UTF-8,否则将显示乱码。

总结:

关键点二、关键点四是解决Informix乱码问题的重中之重,只要这两个关键点不出问题,中文肯定能够正常读写到数据库中。另外,需要注意的是,这套解决方案只针对部署在Linux/Unix上的Informix,并且测试有效。一套数据库,居然部署在Windows服务器上,太掉价了,这种情况完全不予考虑。

完美解决Informix的中文乱码问题的更多相关文章

  1. 呕心沥血之作:完美解决Informix的中文乱码问题

    Informix是IBM旗下的一款数据库,要不是这个项目需要,估计这辈子我都不知道居然还有这么一款数据库.想来公司的项目遍布全国各地,各种部署环境各种应用场景应有尽有,七七八八的问了一大堆的各项目组兄 ...

  2. 教你解决Sublime Text中文乱码问题

    教你解决Sublime Text中文乱码问题[转载自成长的企鹅]       Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. ...

  3. 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录

    解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区  作者:njchenyi [字体:大 中 小]   我是先安装了Ubuntu 12.04 Server,然后 ...

  4. 分享一个解决MySQL写入中文乱码的方法

    分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...

  5. 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

    前述:      在写这篇笔记之前,对笔记中的设计模式进行介绍:      本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式           (1)装饰(包装)设计模式口诀:         ...

  6. gedit 没有preference项,使preference回归,并用命令行设置行号,解决centos7下中文乱码,text wrapping等问题

    1. 最简单的,使preference选项回来: gsettings set org.gnome.settings-daemon.plugins.xsettings overrides '@a{sv} ...

  7. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  8. 解决phantomjs输出中文乱码

    解决phantomjs输出中文乱码,可以在js文件里添加如下语句: phantom.outputEncoding="gb2312"; // 解决输出乱码

  9. zabbix解决监控图形中文乱码

    原文: https://blog.csdn.net/xujiamin0022016/article/details/86541783 zabbix 4解决监控图形中文乱码首先在windows里找到你想 ...

随机推荐

  1. 第二课 android项目结构

  2. 函数式编程之block

    语法: 注意: 1,在代码块中可以使用和改变全局变量 2,而局部变量可以使用,但是不能改变. 怎么在代码块中改变局部变量呢?在局部变量前面加上关键字:__block 参考: Objective-C语法 ...

  3. percona-toolkit系列之介绍和安装(mysql复制工具)

    percona-toolkit使用教程(一) 一.percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统 ...

  4. C#实现ActiveX控件开发与部署

    现在,我们手里已经有了这个控件包:QRCode.cab,下面我们编写一个测试的网页 <html> <head> <title>无标题页</title> ...

  5. Java-集合框架整理

    一.List 接口集合: 1.优势以及特点:有序,允许重复元素 . 2.实现类: * AarrayList 类:不同步,可变长度数组,倍增率为 1/n ; * LinkedList 类:不同步,链表结 ...

  6. 【转载】为什么CPU有多层缓存

    原文:为什么CPU有多层缓存 http://mp.weixin.qq.com/s?__biz=MzI1NDM2Nzg5Mw==&mid=2247483712&idx=1&sn= ...

  7. firefox渗透师必备的利器

    工欲善必先利其器,firefox一直是各位渗透师必备的利器,小编这里推荐34款firefox渗透测试辅助插件,其中包含渗透测试.信息收集.代理.加密解密等功能. 1:Firebug Firefox的 ...

  8. TCP的流量控制和拥塞控制

    1.TCP的流量控制 一般说来,我们总是希望数据传输的更快一些.但如果发送方吧数据发送的过快,接收方就可能来不及接收,就会造成数据的丢失.所谓的流量控制就是让发送方的发送速率不要太快,要让接收方来的及 ...

  9. 多命令顺序执行、管道符 ; && || |

    多命令顺序执行:

  10. nyoj 1058部分和问题(DFS)

    部分和问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K.   输入 首先, ...