惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - HAL9000

旧文重发:漫谈字符集和编码 用html5 canvas和JS写个数独游戏 如何破解.net软件 夜晚才能工作的程序员 公司让各部门写春联,这是我们部门写的对子 盖茨和乔布斯 利用简单的力学法则来模拟天体运行(2) 利用简单的力学法则来模拟天体运行 一个仿windows泡泡屏保的实现 msdn版windows 8无法激活的解决办法 谁是DAC2.8和jet4.0的接班人? 一个长事务引起的血案——Informix 长事务回滚失败引起的阻塞故障处理 一些常见的星际旅行的科技名词与其"理论根据": 笔记:连接SCO上的FTP时为何那么慢 关于中文编程的段子的一个实现 VC非托管代码调用webservice,并支持代理服务器设置 天哪,我遇上了一个windows api BUG! 并贡献一个完全支持代理服务器的http文件下载VC代码 找到锁域账号的元凶 求高手指点:VC中wininet的代理服务器问题,耗了两天了,没有一点办法
informix cli 汉字乱码的解决办法
HAL9000 · 2013-04-02 · via 博客园 - HAL9000

由于informix数据库的代码集被设置为en_us.8859-1,因此在使用csdk 2.8以及以上的驱动程序时,都会因为这个错误的字符集设定而无法正常显示汉字。这里是一个比较彻底的解决方案:

万能的互联网,千万要让这个文章永远地存在下去呀!

informix CSDK 在2.8以前,默认情况下使用 Garbage In, Garbage Out 模式处理中文字符,若数据库服务器上的 DB_LOCALE 采用默认的 en_us.8859-1 字符集,能够正常支持中文字符。但是升级到 CSDK2.8 及以上版本时,不再支持 Garbage In, Garbage Out 模式,将出现乱码问题。该情况下,建议更改数据库的字符集(设置 DB_LOCALE=zh_cn.GB18030-2000,重新创建数据库),然后按本文中描述的方法进行 DB_LOCALE 与 CLIENT_LOCALE 的设置方法进行处理。若在实际环境下重建数据库成本太高,可以考虑如下步骤进行解决 ODBC 支持中文的问题。

数据库服务器端:
 1. 设置环境变量: IFMX_UNDOC_B168163=1;export IFMX_UNDOC_B168163
 2. 将 en_us.8859-1 字符集文件拷贝到 zh_cn 目录下
     cd $INFORMIXDIR/gls/lc11 
     cp ./en_us/0333.lco ./zh_cn 
 3. 重新启动 IDS 


客户端:
odbc里,可以在数据源配置里设置如下:

    DB_LOCALE=zh_cn.GB18030-2000 
    CLIENT_LOCALE=zh_cn.GB18030-2000 

也可以在连接串里增加设置:

dsn=xxx;uid=xxx;pwd=xxx;DLOC=zh_cn.GB18030-2000;CLOC=zh_cn.GB18030-2000;

使用IBM.Data.Informix.IfxConnection的,可以这样设置connection对象:

             IBM.Data.Informix.IfxConnection conn = new IfxConnection("DataBase=xxx;Server=xxx;User ID=xxx;Password=xxx");
            conn.ClientLocale = "zh_cn.GB18030-2000";
            conn.DatabaseLocale = "zh_cn.GB18030-2000"; 


对于 JDBC 我们可以通过 NEWCODESET 来解决该问题:


 URLString  =  "jdbc:Informix-sqli://9.125.66.130:6346/dbname:InformixSERVER=servername;
NEWCODESET=GB18030-2000,8859-1,819;
CLIENT_LOCALE=en_US.8859-1;DB_LOCALE=en_US.8859-1;"

在64位系统中,系统中有两个odbc管理器,即32位版与64位版。分别对应于不同版本的数据源驱动程序。对应的管理器只能配置与管理对应版本的数据源。不同版本的数据源可以重名,即可以同时存在一个32位的"testconn"和一个64位的"testconn",它们的连接字符串都是一样的:"dsn=testconn;uid=informix;pwd=xxxxxx"

在64位windows系统上安装informix cli驱动时,可以安装32位版或是64位版,或是两者都装,但会有一些冲突。

只安装64位版cli驱动时,所有的应用程序必须编译为x64位版本,或是anycpu(需要测试)。64位应用程序只能使用64位cli驱动程序,也只能使用64位odbc源。

只安装32位版cli驱动时,所有的应用程序必须编译为x86(32位)版本才能运行。也只能使用32位odbc数据源。如果是ASP.net应用,必须在iis里为应用程序池设置“允许运行32位应用程序”。

在windows server 2008\2008 r2\2012 的x64版本的各系统上,也可以同时安装x64版本与32位版本cli。但是由于安装过程、先后顺序、环境变量等问题,可能会造成其中一个不能正确连接数据库的情况。建议如下处理:

64位版的cli驱动安装于 "c:\program files\" 下。

32位版的驱动则应该安装于 "c:\program files (x86)\" 下,在安装前,需要在系统环境变量 path 中设定一个 "c:\windows\syswow64;" 到所有的项目之前。

在设定数据源时,如果某个cli的数据源无法连接数据库,报告“unable to load translation shared library”,那么请为该数据源设定Translator lib项目为“C:\Program Files\Informix\Client-SDK\bin\igo4n304.dll”或是“C:\Program Files (x86)\Informix\Client-SDK\bin\igo4n304.dll”.

 最后:好像直接修改数据库里的systables表里,tabname = ' GL_COLLATE' or ' GL_CTYPE' 的site字段的内容,比如从 'en_US.819' 改为 'zh_CN.GB18030-2000' 也可以直接修改掉数据库的字符集设定。简单测试了一下似乎没有问题,但没敢多试就改回来了。