日期:2014-05-17  浏览次数:20808 次

JDBC_读写生僻汉字_SYBASE
最近做一个项目,需要使用SYBASE数据库。

基本功能就是从SYBASE中读取信息在页面显示。

页面字符集是UTF-8
SYBASE默认字符集是 ENCGB

本来功能是正常的。
最近发现一个问题,在数据库中保存一些生僻字后,如果直接用isql在SYBASE数据库里写是可以正常保存的。
例如:喆,在数据库里保存是正常的。
但是通过JDBC连接数据库,读出来的却是“?”
连接数据库的URL是这样写的。
 jdbc:sybase:Tds:localhost:5007/myDB?charset=cp936


普通汉字都可以正常的进行读写,只有那些生僻字无法显示。
SYBASE数据库中也添加了cp936字符集。
但是还是无法正常读写生僻汉字。
数据库的默认字符集不允许 改为“CP936”,所以只能在连接字符串上添加字符集CP936
大家有没有遇到过这种问题。

通过JDBC连接SYBASE获取的结果是什么字符集的呢?可以在读写的时候对字符串的编码进行转换吗?

------解决方案--------------------
资料:
EUCGB字符集是基于GB2312-80编码规范的,它的EUC (Extended Unix Code)编码范围是第一字节0xA1~0xFE(实际只用到0xF7),第二字节0xA1~0xFE。 CP936字符集是基于GBK编码规范(实际上的国家标准是GB13000-90),是对GB2312进行的扩展。
一般来说,由于EUCGB不支持国标一、二级字库以外的汉字,所以推荐在服务器端和客户端都使用CP936字符集。

根据这个理解,cp936>EUCGB。因为没搞过sysbase,所以给楼主的建议是:
1 jdbc:sybase:Tds:localhost:5007/myDB?charset=cp936的确起作用了吗?
2,“例如:喆,在数据库里保存是正常的。”这说法是有根据什么得出的,EUCGB能存那个生僻字么?