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;

这个点也必须强调一下,它的重要性仅次于关键点二。在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的中文乱码问题  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. OI算法复习汇总

    各大排序 图论: spfa floyd dijkstra *拉普拉斯矩阵 hash表 拓扑排序 哈夫曼算法 匈牙利算法 分块法 二分法 费马小定理: a^(p-1) ≡1(mod p) 网络流 二分图 ...

  2. javascript实现原生ajax的几种方法介绍

    自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...

  3. Decorator——Python初级函数装饰器

    最近想整一整数据分析,在看一本关于数据分析的书中提到了(1)if __name__ == '__main__' (2)列表解析式 (3)装饰器. 先简单描述一下前两点,再详细解说Python初级的函数 ...

  4. python能干什么?

    python能干什么? 网络爬虫 爬虫,指的是从互联网采集数据的程序脚本 . 爬天爬地爬空气 ,无聊的时候爬一爬吃鸡数据.b站评论,能得出很多有意思的结论.知乎有个很有意思的问题——"利用爬 ...

  5. (转)rvm安装与常用命令

    rvm是一个命令行工具,可以提供一个便捷的多版本ruby环境的管理和切换. https://rvm.io/ 如果你打算学习ruby/rails, rvm是必不可少的工具之一. 这里所有的命令都是再用户 ...

  6. HDU 4990 Reading comprehension 矩阵快速幂

    题意: 给出一个序列, \(f_n=\left\{\begin{matrix} 2f_{n-1}+1, n \, mod \, 2=1\\ 2f_{n-1}, n \, mod \, 2=0 \end ...

  7. CodeForces 109C 树形DP Lucky Tree

    赶脚官方题解写得挺清楚的说,=_= 注意数据范围用long long,否则会溢出. #include <iostream> #include <cstdio> #include ...

  8. 光学字符识别OCR-2

    灰度聚类 接着我们就对图像的色彩进行聚类.聚类的有两个事实依据:         1.灰度分辨率   肉眼的灰度分辨率大概为40,因此对于像素值254和255,在我们肉眼看来都 只是白色:       ...

  9. [译]PYTHON FUNCTIONS - MAP, FILTER, AND REDUCE

    map, filter, and reduce Python提供了几个函数,使得能够进行函数式编程.这些函数都拥有方便的特性,他们可以能够很方便的用python编写. 函数式编程都是关于表达式的.我们 ...

  10. vs2015代码图

    可以看到代码的调用关系. 知乎文章:IDE 而言,是 Xcode 的技术比较先进还是 Visual Studio?