Sybase技术

数据库中文问题

字苻集是基于数据库操作系统平台和语言集的集合,在C/S系统中,支持多语言的数据处理中,所有使用的语言必须属于同一个语言组,因此为了支持全球"所有"的语言(650种)有一个公共的字符集-unicode.

对于中文的支持,我们一般建议采用cp936,它是基于CB13000-90,对GB2312(EUCGB)的扩展,向下兼容EUCGB。目前支持中文最丰富的是GB18030,它不仅支持27000个汉字,还支持藏,蒙,维吾尔等民族语言,不过它只支持一种排序区别大小写的方式binary。utf8是要用3个字节表示一个字符,因此会多消耗50%的存储空间.

如果服务器和客户端都使用ISO_1,那么系统会自动把一个汉字当两个字符处理,一般情况下不会有影响,但如果执行"like"的时候可能会出错.

ASE数据库初次安装后是没有CP936的,如果需要加载过程如下:

1)在$SYBASE\charsets\cp936目录下,执行charset -Usa -Ppassword -Sserver_name binary.srt cp936

2)在SQL环境下看是否加载成功,select name,id from syscharsets,看是否有name为cp936,id 为171的行

3)如果存在,加载成功,把默认字符集设为CP936,sp_configure "default character set id",171

4)重起数据库,第一次会自动宕机,然后第二次重起

如果这时用isql连接发现客户端与服务器之间的字符无法自动转换,则要修改客户端字符集:

1)在操作系统下,用sybase用户登陆,看客户端的语言LANG,如果装了SYBASE的环境变量配置,一般为"C"

2)到$SYBASE\locales目录下修改locales.dat文件中的字符集定义,首先找到对应的操作系统,然后在找语言(如"C",或默认default)对应的行,然后做修改到相应的字符集(如cp936)

如果系统用的双机,则需要改在两台机改同样的文件,$SYBASE/ASE-12_5/servername.cfg和$SYBASE/locales/locales.dat。