字符集编码

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客户端支持的字符集,如果指定的字符集无效,则会使用环境变量或者系统默认字符集进行设置

注解

  1. NLS_OSCAR_LANG的作用域是所有驱动,例如ACI、ODBC也会获取该变量,如将该变量设置成系统级别的变量,需谨慎考虑会不会影响到其它驱动。
  2. 用isql执行SQL脚本时,如果SQL脚本的编码与isql的客户端编码不同,需要将isql的客户端编码设置为SQL脚本的编码格式,可以将SET CLIENT_ENCODING 命令放置在SQL脚本的开始位置。
  3. 如果数据库端的字符被设置为ASCII,则isql将不进行任何转码,会将客户端的数据按照字节直接发送给数据库端,这种情况下容易导致不同编码终端插入数据时,数据库中的数据编码不同意,容易造成乱码。
  4. isql字符集编码获取的顺序为:-g参数 > 环境变量 > 默认字符集

isql客户端CLIENT_ENCODING命令支持的常见字符集:

设置 显示 描述
big5 BIG5 支持中国台湾繁体字
gb18030 GB18030 支持中文,与GBK兼容
gbk GBK 国标汉字编码字库
utf8 UTF8 一种可变长度字符编码字库