最近一个项目用的是sybase的数据库。。。那叫一个蛋疼。。。搞伤的了。。。

先是乱码问题:

这是个老生常谈的问题。网上说连接字符串后面加个charset=cp850就行了。。我试了下不行。。。然后又说什么cp936。。。然后我一查我们的sybase服务器还没cp936.。。然后又是安装。。安装倒是挺容易的。在命令行里面进行sybase安装文件夹下。例如:

cd Sybase\ charsets\ cp936

d:\sybase\charsets\cp936>charset -Usa -Ppassword –Sserver_name binary.srt cp936

就行了。

可以在cmd里使用isql -U -P 进行dos操作页面。。后面分别跟上数据库用户名密码

select name,id from syscharsets可查看已安装的所以字符集

sp_helpsort 可查看默认字符集
sp_configure "default character set id",1 可设置默认字符集。。后面的参数值为对应编码在syscharsets表里的Id值。设置之后要重启服务器。。第一次重启会报错。第二次正常。

dump   database   DBname   to   "D:\DB.dup "  备份数据库
load   database   DBname   from   "D:\DB.dup "  还原数据库

select @@client_csname  查看客户端编码

再回过头说编码问题。我装了cp936改下连接字符串。。还是不行。再查。。说eucgb可以。。。还是不行。我又装了utf8还是不行。。。后来看到一篇很短小的文章觉得这个说的比较靠谱。

sybase中文字符编码
数据库编码常用有2种:iso_1和cp_850。若为iso_1则在配jdbc连接数据源时使用eucgb(最常用),写法为jdbc:sybase:Tds:10.20.10.21:4100/dmis_dict?charset=eucgb,查询结果集不需处理即可正常显示;若数据库编码为cp_850,在配数据源时使用jdbc:sybase:Tds:10.20.10.4:5000/dbwddyx?charset=iso_1,查询结果要用ISO_8859_1转换一下,new String(temp.getBytes("ISO-8859-1"),"GBK")。

http://afront.bokee.com/5888791.html

我的项目编码是UTF-8。。现在想解决问题的只有2中方法。一种就是修改默认编码。另外一种就是手动转换。但是修改默认编码的话对数据库有影响。而且我们是在客户原有的业务系统做二次开发。不可能修改编码的。。最后只有把编码写入配置文件。在程序中手动转码。

 

还有就是有的时候用jconn3.jar包会出现事务未关闭的问题。最好用jtds。。。jtds同样可以设置charset不过不是跟在连接字符串后面。而是放在param属性里面。

 

另外sybase sql语句的语法我发现近似于sqlserver 。。。。

 

还有就是sybase服务器有user connection的限制。。这个也可以用isql命令进入dos操作环境后进行配置。

sp_configure "number of connections",2oo后面的200就是你所设置的用户连接数。。如果去除参数改命令可查看当前所设置的用户连接数。。