字符集编码¶
isql提供了字符集转换功能,用户可使用该功能将后台的数据转换成自己所需编码的数据,为了避免乱码,isql运行的终端字符集需要与isql的客户端字符集相同。
isql在windows下默认为GBK编码;在Linux下默认为Utf8编码,用户可通过命令“echo :ENCODING”查看当前客户端字符集。
设置客户端字符集有三种形式,1.获取系统字符集;2.本地字符集环境变量(NLS_OSCAR_LANG);3.在iSQL登录后内部设置字符集 4.通过-g参数进行设置
下面介绍四种形式的设置方式:
Windows平台:
1.在iSQL登录后内部设置字符集:
登录isql之后根据不同情况而定输入"SET CLIENT_ENCODING TO XXX",回车即可。XXX为isql客户端支持的字符集,比如GBK、UTF8;注意本次修改只对当前isql窗口有效。
2.添加NLS_OSCAR_LANG:
我的电脑->属性->高级系统设置->环境变量->系统变量,点击新建,变量名中输入:NLS_OSCAR_LANG,变量值输入:GBK或者UTF-8,根据不同情况而定; 或者打开命令行窗口,在命令行中输入"set NLS_OSCAR_LANG=GBK"或者"set NLS_OSCAR_LANG=UTF-8",回车即可,注意这次修改只对该窗口有效。
3.通过-g参数设置字符集
通过isql -g gbk设置当前字符集,设置的字符集为isql客户端支持的字符集,如果指定的字符集无效,则会使用环境变量或者系统默认字符集进行设置
Linux平台:
1.在iSQL登录后内部设置字符集:
登录isql之后根据不同情况而定输入"SET CLIENT_ENCODING TO XXX",回车即可。XXX为isql客户端支持的字符集,比如GBK、UTF8;注意本次修改只对当前isql窗口有效。
2.修改系统变量(LANG):
一般LINUX平台下的默认字符集是UTF8,如果需要修改编码方式为其它编码(如GBK),只需要打开终端窗口,在窗口中输入 "export LANG=zh_CN.GBK"即可,注意这次修改只对该窗口有效。
3.添加NLS_OSCAR_LANG:
神通数据库本地字符集环境变量(NLS_OSCAR_LANG),设置方式和上面的方式一样,如果需要修改字符集编码方式为GBK,在终端窗口中输入"export NLS_OSCAR_LANG=GBK"即可。在部分的国产平台操作系统上,有缺失LANG环境变量的情况,可尝试设置该变量进行修复。
4.通过-g参数设置字符集
通过isql -g gbk设置当前字符集,设置的字符集为isql客户端支持的字符集,如果指定的字符集无效,则会使用环境变量或者系统默认字符集进行设置
注解
- NLS_OSCAR_LANG的作用域是所有驱动,例如ACI、ODBC也会获取该变量,如将该变量设置成系统级别的变量,需谨慎考虑会不会影响到其它驱动。
- 用isql执行SQL脚本时,如果SQL脚本的编码与isql的客户端编码不同,需要将isql的客户端编码设置为SQL脚本的编码格式,可以将SET CLIENT_ENCODING 命令放置在SQL脚本的开始位置。
- 如果数据库端的字符被设置为ASCII,则isql将不进行任何转码,会将客户端的数据按照字节直接发送给数据库端,这种情况下容易导致不同编码终端插入数据时,数据库中的数据编码不同意,容易造成乱码。
- isql字符集编码获取的顺序为:-g参数 > 环境变量 > 默认字符集
isql客户端CLIENT_ENCODING命令支持的常见字符集:
| 设置 | 显示 | 描述 |
|---|---|---|
| big5 | BIG5 | 支持中国台湾繁体字 |
| gb18030 | GB18030 | 支持中文,与GBK兼容 |
| gbk | GBK | 国标汉字编码字库 |
| utf8 | UTF8 | 一种可变长度字符编码字库 |