Sybase字符集设置(附jconnect支持的 Sybase 字符集)
1、如何查看服务器端、客户端字符集?
查看服务器端字符集:?
在isql环境中执行:
?????? C:\Documents and Settings\Administrator>isql -Usa -Ptest02 -Ssyb125
1>?sp_helpsort?
2>?go?
查看客户端字符集:?
在isql环境中执行:?
1>?select?@@client_csname?
2>?go
?
2、如何配置服务器端默认字符集
UNIX平台上使用sqlloc命令或者编辑sqlloc.rs脚本文件;Windows平台使用“服务器配置”图形化管理工具直接配置服务器端字符集。
(1)UNIX平台
配置服务器端字符集的方法?sqlloc
在$SYBASE_OCS/bin目录下执行:sqlloc,将出现一个图形化界面,在这个界面中您可以直接选择语言集,字符集,排序顺序,便很容易地就完成了配置工作。?
编辑sqlloc.rs脚本文件?
?将$SYBASE-ASE/init/sample_resource_files/sqlloc.rs拷贝到$SYBASE_OCS/bin目录下,按以下黑体字提示编辑该文件:?
sybinit.release_directory:?/home/sybase―――输入Sybase产品的安装路径?
sqlsrv.server_name:?SYB125―――输入数据库服务器的名称?
sqlsrv.sa_login:?sa?
sqlsrv.sa_password:?―――输入sa的口令,若为空,则什么也不填?
sqlsrv.default_language:?us_english―――输入想要配置的语言集?
sqlsrv.language_install_list:?USE_DEFAULT?
sqlsrv.language_remove_list:?USE_DEFAULT?
sqlsrv.default_characterset:?cp850―――输入想要配置的字符集?
sqlsrv.characterset_install_list:?USE_DEFAULT?
sqlsrv.characterset_remove_list:?USE_DEFAULT?
sqlsrv.sort_order:?binary―――输入想要配置的排序顺序?
#?An?example?sqlloc?resource?file...?
#?sybinit.release_directory:?USE_DEFAULT?
#?sqlsrv.server_name:?PUT_YOUR_SERVER_NAME_HERE?
#?sqlsrv.sa_login:?sa?
#?sqlsrv.sa_password:??
#?sqlsrv.default_language:?french?
#?sqlsrv.language_install_list:?spanish,german?
#?sqlsrv.language_remove_list:?USE_DEFAULT?
#?sqlsrv.default_characterset:?cp437?
#?sqlsrv.characterset_install_list:?mac,cp850?
#?sqlsrv.characterset_remove_list:?USE_DEFAULT?
#?sqlsrv.sort_order:?dictionary?
保存已经修改好的sqlloc.rs脚本文件,执行以下命令:?
sqllocres?-r?sqlloc.rs?
注意屏幕上出现的提示信息,如无异常,则完成配置工作。
(2)Windows平台
“服务器配置”管理工具提供了一个易于操作的图形化管理平台,根据工具中提示的信息,很容易就完成了字符集的配置工作。
有时候“服务器配置”管理工具有问题,也可在isql中执行:
C:\Documents and Settings\Administrator>isql -Usa -Ptest02 -Ssyb125
1>?select name,id from syscharsets
2>?go
找到目标字符集对应的id,假设要将默认字符集设为iso_1,对应id为1
1>?sp_configure "default character set id",1
2>?go
字符集修改完毕,重启server两次。
(注:第一次启动后,server会自动宕掉,需要第二次重启后才能使用)
?
3、如何配置客户端缺省字符集
配置客户端缺省字符集实际上就是对“$SYBASE\locales”目录下locales.dat文件的修改。
Windows平台用写字板方式打开该文件,在UNIX平台可以直接使用“vi”命令打开该文件,我们会看到,该文将中所有字符集的配置都是以服务器端操作系统平台名称分组的。
其中,操作系统名称放在每一组最开始的“[]”中,而且请注意上面黑体字,每一组中都会存在一行“locale?=?default,…”。我们要修改客户端的默认字符集,就是对这一行进行修改。?
例如,某系统服务器端是SUN平台,服务器端语言集为english,字符集为cp850。我们要修改客户端字符集与服务器端一致,怎么做??首先找到[SUN]操作系统分组,然后修改“locale?=?default,…”为“locale?=?default,us_English,cp850”。
保存该文件,就完成对客户端字符集的修改了。
这里,还要说明一种特殊情况:?
为了满足服务器端某些应用的特殊需求,在服务器端设置了一个环境变量:LANG,此时客户端字符集该如何设置呢??
例如,某系统服务器端是Windows平台,使用语言集english,字符集iso_1,并设置环境变量LANG=C。我们要修改客户端字符集与服务器端一致,怎么做??
首先找到[NT]操作系统分组,然后在该组中加入一行?
“locale?=?C,us_English,iso_1”
修改前:?
[NT]?
locale?=?enu,?us_english,?iso_1?
locale?=?fra,?french,?iso_1?
locale?=?deu,?german,?iso_1?
locale?=?japanese,?japanese,?sjis?
locale?=?chs,?chinese,?eucgb?
locale?=?cht,?tchinese,?big5?
;?locale?=?kor,?korean,?eucksc?
locale?=?us_english.utf8,?us_english,?utf8?
locale?=?default,?us_english,?iso_1?
修改后:?
[NT]?
locale?=?enu,?us_english,?iso_1?
locale?=?fra,?french,?iso_1?
locale?=?deu,?german,?iso_1?
locale?=?japanese,?japanese,?sjis?
locale?=?chs,?chinese,?eucgb?
locale?=?cht,?tchinese,?big5?
;?locale?=?kor,?korean,?eucksc?
locale?=?us_english.utf8,?us_english,?utf8?
locale?=?default,?us_english,?iso_1?
locale?=?C,us_English,iso_1??
因此在修改客户端字符集之前,请先查看服务器端是否设置了环境变量“LANG“,再决定如何修改。
?
4、如何选择ASE字符集使之支持简体中文字符
目前在ASE?12.5中支持中文字符的字符集有四种:CP936,EUCGB,UTF-8和GB18030。?
其中EUCGB字符集是基于GB2312-80编码规范的,它的EUC?(Extended?Unix?Code)编码范围是第一字节0xA1~0xFE(实际只用到0xF7),第二字节0xA1~0xFE。?
CP936字符集是基于GBK编码规范(实际上的国家标准是GB13000-90),是对GB2312进行的扩展,第一字节为0x81~0xFE,第二字节分两部分,一是0x40~0x7E,二是0x80~0xFE。其中和GB2312相?同的区域,字完全相同。?
GB18030字符集(国家标准号是GB18030-2000)是2000年3月17日发布的新的中文编码标准。它是GB2312的扩充,采用单/双/四字节编码体系结构,收录了27000多个汉字以及臧文、蒙文、维吾尔文等主要的少数民族文字。Sybase?从ASE?12.5.0.3之后开始支持GB18030字符集。?
UTF-8字符集是现有ASCII系统向Unicode转换的一个过渡方案。它使用1-3字节表示一个字符。简体中文的每个字符在utf8中的长度基本上都是3个字节。它的最主要的优点是可以同时支持超过650种语言的字符。缺点是针对中文字符来说,需要增加50%的空间用来存储。还有一个问题是执行sp_helptext显示存储过程体的时候,有可能出现半个汉字。?
一般来说,由于EUCGB不支持国标一、二级字库以外的汉字,所以我们推荐用户在服务器端和客户端都使用CP936字符集,或者在ASE?12.5.0.3之后还可以使用GB18030字符集,它可以支持一些比较生僻的汉字。它的不足是只有一种排序方式,即区分大小写的Binary方式。所以,如果需要使用支持中文字符集且不区分大小写的数据库时,就只能使用UTF-8作为服务器端字符集,而客户端使用CP936或GB18030字符集。?
另外,还有一种选择是,服务器端和客户端都使用iso_1字符集,虽然iso_1字符集并不直接支持中文字符,但我们将服务器端和客户端都设置成iso_1字符集后,系统也不会在客户端和服务器端进行字符转换,它只不过将一个汉字的两个字节当做两个单独字符来处理,一般情况下没有问题。但当执行like匹配查询的时候,它有可能返回不正确的结果,原因是服务器端是根据单字节去匹配查询条件的,很可能会有前一个汉字的第二字节与后一个汉字的第一字节的内码组合符合查询条件,被服务器端作为查询结果返回来。
?
5、如何安装cp936字符集?
以在Windows平台安装cp936字符集为例,说明如何安装使用服务器中没有被默认安装的字符集。(在ASE?12.5.0.3版本中安装GB18030字符集的方法类似)?
(这里SYBASE的安装路径为c:\sybase)?
1.c:\>cd?\sybase\charsets\cp936?
2.c:\sybase\charsets\cp936>?charset?-Usa?-Psa_pass?-Sserver_name?binary.srt?cp936?
3.在isql环境中?1>select?name,id?from?syscharsets?
2>go?
找到name为cp936对应的id(假设为171)?
4.1>sp_configure?"default?character?set?id",171?
2>go?
重启server两次。?
?
6、jconnect支持的 Sybase 字符集?
?
SybCharset 名称
?
JDK 字节转换程序
?
ascii_7
?
ASCII
?
big5
?
Big5
?
big5hk(参见注意)
?
Big5_HKSCS
?
cp037
?
Cp037
?
cp437
?
Cp437
?
cp500
?
Cp500
?
cp850
?
Cp850
?
cp852
?
Cp852
?
cp855
?
Cp855
?
cp857
?
Cp857
?
cp860
?
Cp860
?
cp863
?
Cp863
?
cp864
?
Cp864
?
cp866
?
Cp866
?
cp869
?
Cp869
?
cp874
?
Cp874
?
cp932
?
MS932
?
cp936
?
GBK
?
cp950
?
Cp950
?
cp1250
?
Cp1250
?
cp1251
?
Cp1251
?
cp1252
?
Cp1252
?
cp1253
?
Cp1253
?
cp1254
?
Cp1254
?
cp1255
?
Cp1255
?
cp1256
?
Cp1256
?
cp1257
?
Cp1257
?
cp1258
?
Cp1258
?
deckanji
?
EUC_JP
?
eucgb
?
EUC_CN
?
eucjis
?
EUC_JP
?
eucksc
?
EUC_KR
?
ibm420
?
Cp420
?
ibm918
?
Cp918
?
iso_1
?
ISO8859_1
?
iso88592
?
ISO8859-2
?
is088595
?
ISO8859_5
?
iso88596
?
ISO8859_6
?
iso88597
?
ISO8859_7
?
iso88598
?
ISO8859_8
?
iso88599
?
ISO8859_9
?
iso15
?
ISO8859_15_FDIS
?
koi8
?
KOI8_R
?
mac
?
Macroman
?
mac_cyr
?
MacCyrillic
?
mac_ee
?
MacCentralEurope
?
macgreek
?
MacGreek
?
macturk
?
MacTurkish
?
sjis
?
MS932
?
tis620
?
MS874
?
utf8
?
UTF8
?
注意: 只有在使用 JDK 1.3 或更高版本时才支持 big5hk 字符集。