完美解决Informix的中文乱码问题
刚开始接触这玩意时完全摸不着头脑,它的设计理念和使用方法太尼玛诡异了,无论是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的中文乱码问题的更多相关文章
- 呕心沥血之作:完美解决Informix的中文乱码问题
Informix是IBM旗下的一款数据库,要不是这个项目需要,估计这辈子我都不知道居然还有这么一款数据库.想来公司的项目遍布全国各地,各种部署环境各种应用场景应有尽有,七七八八的问了一大堆的各项目组兄 ...
- 教你解决Sublime Text中文乱码问题
教你解决Sublime Text中文乱码问题[转载自成长的企鹅] Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. ...
- 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录
解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区 作者:njchenyi [字体:大 中 小] 我是先安装了Ubuntu 12.04 Server,然后 ...
- 分享一个解决MySQL写入中文乱码的方法
分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ...
- gedit 没有preference项,使preference回归,并用命令行设置行号,解决centos7下中文乱码,text wrapping等问题
1. 最简单的,使preference选项回来: gsettings set org.gnome.settings-daemon.plugins.xsettings overrides '@a{sv} ...
- 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢
目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...
- 解决phantomjs输出中文乱码
解决phantomjs输出中文乱码,可以在js文件里添加如下语句: phantom.outputEncoding="gb2312"; // 解决输出乱码
- zabbix解决监控图形中文乱码
原文: https://blog.csdn.net/xujiamin0022016/article/details/86541783 zabbix 4解决监控图形中文乱码首先在windows里找到你想 ...
随机推荐
- 通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用 矩形的左上角坐标来标识,包含: 添加两个属性:矩形左上角坐标startX和startY。 两个构造方法: 带4个参数的构造方法,用于对startX、startY、width和height属性 初始化; 不带参数的构造方法,将矩形初始化为左上角坐标、长和宽都为0 的矩形; 添加一个方法: 判断某个点是否在矩形内部的方法
package b; public class Rect { Double width; Double height; public Double getWidth() { return width; ...
- CodeForces 34B Sale
Sale Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 构建一个简单的Maven项目
这里用Maven Archetype插件从空白开始创建简单的项目. 熟悉Maven 项目和Maven的核心概念. 关键词:构建生命周期(build lifecycle), Maven仓库(reposi ...
- CUBRID学习笔记 47 show
cubrid的中sql查询语法show c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . ...
- HDU 5877 Weak Pair(弱点对)
HDU 5877 Weak Pair(弱点对) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Jav ...
- 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。
这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...
- 内部使用final参数的原因
局部内部类(即:定义在方法中的内部类),访问方法中的局部变量 : 局部变量的生命周期与对象的生命周期的不一致性!方法在执行完方法的局部变量就消失,而内部类如果有引用还是存在的,那么将找不到变量.此时设 ...
- mysql 检查字符串是否包含子串
1.使用substring_index(src,target,index) 从src的开头查找第index个target.返回的substring为从src的开头到第num个target这段字符串.比 ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- Object Pascal 控制语句
控制语句 1.常量声明语句常量在声明时就被赋予了一个值,在程序执行过程中是不可改变的. 格式 const 常量名 :数据类型 = 值 下面的例子声明了3 个常量: const Pi = 3.14159 ...