ifx
编码问题
字符编码及Informix中文支持配置方法
951错误
特殊字符处理
常用脚本与sql
unload相关
本文档使用 MrDoc 发布
-
+
首页
字符编码及Informix中文支持配置方法
摘自[这里](https://www.talkwithtrend.com/Article/196399 "这里") ## 1.字符编码介绍 ASCII:7个二进制位表示的字符编码。 ISO8859-1:单字节编码。以另一种编码为基础,可以用来表示中文字符,如“中文”两个字的GB2312编码为“d6d0 cec4”,使用ISO8859-1编码时将其拆开为4个字节表示。 GB2312:简体中文编码字符集,双字节编码。 GBK:GB2312的扩展,可同时表示繁体字和简体字。 GB18030:GBK的扩展,包括更多的中文字符。 UTF8:兼容ISO8859-1编码,可以用来表示所有语言的字符,不定长编码,每个字符的长度为1~6个字节不等,英文字母为1个字节,汉字为3个字节。 UNICODE:定长双字节编码,可以表示所有语言的字符。 ## 2. 查看数据库的区域设置 区域设置 (locale)指的是特定于语言和地域的规则和数据的集合。查看数据库实例中各个数据库的区域设置的方法如下: `select * from sysmaster:sysdbslocale;` 查询得到的区域设置格式如下:语言_地区.字符编码。 Informix GLS 语言环境对常用的字符集进行了命名及内部编码(详情查看$INFORMIXDIR/gls/cm3/registry),其中字符集8859-1的内部编码为819。数据库sysmaster、sysutils、sysuser和sysadmin的区域设置都为en_US.819,其它用户创建的数据库在没有设置DB_LOCALE的情况下区域设置也为en_US.819。 ## 3. 创建中文数据库 在默认情况下,Informix数据库不支持中文的存储和读取。创建中文数据库需要设置环境变量DB_LOCALE和CLIENT_LOCALE。Informix支持多种区域和字符集,以下介绍在不同的区域设置类型下存取中文的方法。 ### 1) en_us.utf8 (1) 创建数据库dbutf8 ```txt $ export DB_LOCALE=en_us.utf8 $ dbaccess - - > create database dbutf8; ``` (2) 使用dbvisualizer客户端工具连接数据库 在dbvisualizer中使用如下URL连接数据库: ```txt jdbc:informix-sqli://9.123.147.232:19000/dbutf8:INFORMIXSERVER=demoserver;CLIENT_LOCALE=en_us.utf8;DB_LOCALE=en_us.utf8; ``` (3) 使用dbvisualizer在数据库dbutf8中创建测试表t1并插入中文数据 ```txt create table t1(c1 int,c2 char(10)); insert into t1 values(1,'我们'); 注:dbvisualizer的SQL编辑器中正确显示中文设置:点击菜单Tools->Tool Properties,在对话框中选择 General->Appearance->Fonts,将Grid和SQL Editor的字体设为PMingLiU。 ``` (4) 在服务器端使用dbaccess工具检验插入的中文数据 ```txt $ export CLIENT_LOCALE=en_us.utf8 $ dbaccess dbutf8 - > select * from t1; 注:使用终端软件(如XSHELL、CRT)时需要设置软件的编码方式,否则会有乱码问题。XSHELL的设置方法:点击菜单 File->Properties,在打开的属性对话框中点击Terminal,然后在右侧选择正确的编码(Encoding)。 ``` (5) 创建测试表t2,查看表中的货币格式、日期格式和时间格式 ```txt create table t2(c1 int, c2 money,c3 date,c4 datetime year to second); insert into t2 values(1, 5,today,current); select * from t2; c1 c2 c3 c4 1 $5.00 10/09/2012 2012-10-09 13:44:31 注:数据库dbutf8的区域设置为en_us.XXX,表示美国地区、英语环境,相应的货币类型为美元,日期时间格式也遵循英语语言习惯。 ``` ### 2) en_us.8859-1 (1) 创建数据库db8859 ```txt $ export DB_LOCALE=en_us. 8859-1 $ dbaccess - - > create database db8859; ``` (2) 使用dbvisualizer客户端工具连接数据库 在dbvisualizer中使用如下URL连接数据库: ```txt jdbc:informix-sqli://9.123.147.232:19000/db8859:INFORMIXSERVER=demoserver;NEWCODESET=gb18030,8859-1,819;CLIENT_LOCALE=en_us.8859-1;DB_LOCALE=en_us.8859-1; 注:使用字符集8859-1存储中文时,需要指定NEWCODESET属性,NEWCODESET用于将JDK中的字符集和Informix中支持的 字符集连结起来,共有三个参数,第一个参数是JDK中的字符集名,第二个参数是Informix中的字符集名,第三个参数是Informix中的字符编码。 ``` (3) 在db8859中存取中文数据的方法和dbutf8类似。 ### 3) zh_cn.gb18030-2000 (1) 创建数据库db18030 ```txt $ export DB_LOCALE=zh_cn.gb18030-2000 $ dbaccess - - > create database db18030; ``` (2) 使用dbvisualizer客户端工具连接数据库 在dbvisualizer中使用如下URL连接数据库: ```txt jdbc:informix-sqli://9.123.147.232:19000/db18030:INFORMIXSERVER=demoserver;NEWCODESET=gb18030,gb18030-2000,5488;CLIENT_LOCALE=zh_cn.gb18030-2000;DB_LOCALE=zh_cn.gb18030-2000; ``` (3) 在db18030中存取中文数据的方法和dbutf8类似。 ```txt (4) 创建测试表t2,查看表中的货币格式、日期格式和时间格式 create table t2(c1 int, c2 money,c3 date,c4 datetime year to second); insert into t2 values(1, 5,today,current); select * from t2; c1 c2 c3 c4 1 RMB 5.00 2012 10月 09日 2012-10-09 13:51:25 注:和前两种字符集不同,db18030的区域设置为zh_cn.XXX,表示中国地区、中文环境,相应的货币类型为人民币,日期时 间格式也遵循中文语言习惯。 ```
major
2025年1月24日 23:09
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码