解决linux上ASE字符集转换问题

在Linux上安装SYBASE ASE 12.5/15.0数据库,为了跟客户的业务数据库保持一致,缺省字符集是iso_1,现在开发了一个B/S应用,运行在tomcat6.0上,默认使用utf8字符集,以前ASE和tomcat在Windows平台上时一切正常,网页和数据都能正常显示,当服务器全部移植到Linux (RHEL 5.3)上后,数据部分显示汉字就不正常了。连接数据的jdbc串一直是:

jdbc:sybase:Tds:192.168.1.5:5000/mydb?charset=cp936,如果把连接串改成jdbc:sybase:Tds:192.168.1.5:5000/mydb?charset=utf8,那么无论是Windows平台还是Lunix平台则都是乱码。

 

后来经研究发现,ASE数据库在将iso_1字符集转换为utf8字符集时,都是单字节转换的,换句话说他不认识汉字,在iso_1中的一个汉字到了utf8这里就变成了两个汉字了。如果将数据库的缺省字符集改成utf8,汉字部分增加50%的存储空间暂且不考虑,关键是要把所有数据重新bcp下是相当麻烦,若牵涉到客户的业务数据库,则风险更大。经过研究将缺省字符集由iso_1升级为gb18030则比较平顺,这里用了“升级”两字,简单的说gb18030是gbk/gb2312的升级版,当然更是iso_1的升级了。现在ASE数据库在将gb18030字符集转换为utf8字符集时能认得汉字了,既可以转换成utf8,也可以转换成cp936了。

 

只是在使用客户端工具时麻烦了些:

使用isql.exe和sqladv.exe连接的请增加参数:-Jgb18030,

使用PowerBuilder连接的请在Database Profile Setup -> Regional Settings -> Character Set: gb18030,

使用jdbc的请使用jdbc:sybase:Tds:192.168.1.5:5000/mydb?charset=utf8 或者 jdbc:sybase:Tds:192.168.1.5:5000/mydb?charset=cp936

 

那么如何将缺省字符集由iso_1升级为gb18030呢?

1、查看当前连接字符集:

select @@client_csname

go

 

2、安装字符集排序:

cd /sybase/charsets/gb18030

charset -Usa -Sserver_name binary.srt gb18030

 

3、查看gb18030字符集的id(返回的id一般是173,第4步要引用)

select name,id from master..syscharsets where name = 'gb18030'

go

 

4、改变服务器缺省字符集配置(173是上面第3步得到的)

sp_configure 'default character set id', 173

go

 

5、重启数据库,自动检查系统表的采用新字符集后的排序顺序,完了后自动关闭,需要再启数据库即可。

 

参考:http://www.chinaunix.net/jh/21/630973.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值