+ -
当前位置:首页 → 问答吧 → JDBC_读写生僻汉字_SYBASE

JDBC_读写生僻汉字_SYBASE

时间:2011-08-17

来源:互联网

最近做一个项目,需要使用SYBASE数据库。

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

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

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


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

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

作者: so_fast   发布时间: 2011-08-17

GBK应该没问题的

作者: cbxjj   发布时间: 2011-08-17

资料:
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能存那个生僻字么?


作者: jingluo   发布时间: 2011-08-17

引用 1 楼 cbxjj 的回复:
GBK应该没问题的

我用ISQL在数据库里插入“喆”可以正常保存。
但是通过JDBC查询出来就是成问号了。
例如“中喆国”保存在数据库里是对的。
查询出来是“中?国”
就是生僻字无法显示。
其他字都正常。
有人说是字符集统一。但我现在在JDBC连接串上加了CP936,还是不行。。。

作者: so_fast   发布时间: 2011-08-17

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

第一个问题:
我在两台数据库服务器上进行了测试,一台可以成功,一台不行,感觉一点作用都没起。
第二个问题:
是我直接在数据库中进行的操作,确实可以正常保存这些生僻字。

两台数据库服务器的默认字符集都是
charset=170 encgb gb2312-80

作者: so_fast   发布时间: 2011-08-17

热门下载

更多