sybase数据库编码设置问题

Zss 发表于:

在复现导入一个txt数据到表中的时候,发现中文字符乱码,查看到txt文本为cp936的编码,导入到数据库后乱码

手动insert插入一条中文数据后报错,发现无法插入中文字符,最终发现是服务器默认的编码方式问题,修改服务器编码为cp963后正常

客户端的默认字符集选择修改:

1.在安装目录下找到/sybase/locales/locales.dat

2.找到对应操作系统下的字符集配置,如windows
[NT]
locale = enu, us_english, iso_1
locale = fra, french, iso_1
locale = deu, german, iso_1
locale = rus, russian, cp1251
locale = hun, us_english, cp1250
locale = ell, us_english, cp1253
locale = heb, us_english, cp1255
locale = ara, us_english, cp1256
locale = trk, us_english, cp1254
locale = esp, spanish, iso_1
locale = jpn, japanese, sjis
locale = japanese, japanese, sjis
locale = chs, chinese, eucgb
locale = cht, tchinese, big5
locale = kor, korean, cp949
locale = us_english.utf8, us_english, utf8
locale = default, us_english, cp936

找到对应locale=default的行

如上面为:   locale = default, us_english, cp936

查看客户端使用的字符集:
select @@client_csname

这个只是默认修改了选择的方式,如果服务器编码未修改,实际上还是没用
服务器编码安装:
有一些的编码服务器默认没有安装,比如cp936,所以先安装一下
charset -U用户名 -P密码 -S服务名 binary.src 要安装字符集名
charset -Usa -P  -Szxck binary.srt cp936
-S是服务器名字,可以不填写
服务端编码修改:
1.查看当前的编码
sp_configure “default character set id”
2.显示编码对应的id
select name,id from syscharsets
3.查看当前系统支持的编码
select name,id from master..syscharsets where id=2
安装后会发现多了171的cp936
4.找到对应的编码与id修改
sp_configure “default character set id”,171
5.重启两次server,不知道为什么。。。第一次总是进不去,第二次才可以