首先是win xp下Sybase12.5数据库安装配置: 其实安装比较简单,问题主要会出在java字符集导致的安装界面乱码上:
1 把安装程序拷入硬盘,然后把server\shared-1_0\jre1.2.2\lib\font.properties.zh.NT4.0? 重命名为font.properties.zh.NT5.1(xp sp3会对应于NT5.1)。这一步会避免java安装界面中出现的乱码。
2 中间需要重启,安装完成后,会自动进入配置ASE及备份server或xpserver等的界面,悲剧的是配置界面再次出现乱码。原因是此时配置界面从安装后的目录中读取,而安装后的目录,仍需要手工把NT4.0文件改为Nt5.1,所以此时可以胡乱点几下退出配置界面。
3 同样去安装后目录下的shared-1_0目录中找到文件并拷贝一份改名。
4 在开始菜单中找到sybase下的Adaptive配置实用程序,运行,进入刚才退出的配置界面,此时已是中文了。点若干选项后,会出现窗口,配置ase服务,因为此时没有数据库服务被定义,当然要配置一个了。在某个界面,要求配置网络,xp server,命令行参数时,网络和xp server一定要配置,比如给网络添加一个127.0.0.1,2100给xp server添加一个127.0.0.1,2101等。然后点下一步,经过一段时间后,配置将完成。
5 安装个sybase 客户端,并不要求版本一致,比如我安装个sybase 15.0的客户端连接刚才创建的数据库服务。注意刚才的配置已经写入interfaces文件,所以不需另外再建dsedit连接了。也可以直接用isql命令行下连接:
isql -U服务名 -Usa
回车将要求输入sa的密码,默认为空了,回车就可进入此server。下面就可以创建数据库什么的了。
然后就是utf8字符集的正确设置:
在isql下执行过程:
sp_helpsort go
会显示已安装的字符集,默认字符集
Character Set = 2, cp850 Code Page 850 (Multilingual) character set. Sort Order = 50, bin_cp850 Binary Sort Order for Code Page 850 (cp850).
此字符集相当坑爹,坑爹之处略。为了国际化起见,不改cp936,而直接把服务器字符集设成utf8。当然最好是在没有用户数据时进行。
进入机器的安装目录charsets目录下,进入utf8目录:
charset -Usa -S服务名 binary.srt utf8
然后用isql -Usa -S服务名
sp_configure 'default sortorder id',50,'utf8' go shutdown with nowait go
提示连接中断了。在xp下打开服务面板,可看到创建的几个sybase服务都处于停止状态,右键将sybase的数据库服务启动,可能会失败,再次启动就会成功。然后再次用 isql登录:
sp_helpsort go
会看到,默认字符集已经变为 utf8(id 190)的字符集了。再shutdown并重启一下,就更放心了。
最后是客户端的连接
用sybase 15版的客户端Interactive sql连接时无所谓了,把charset 设成同服务器一样的utf8即可,语言为默认。
用isql连接时,若用isql 默认连上时,是会出现汉字数据显示的乱码的,若用isql -Usa -S服务名-Jutf8连上,也一样会不能正常显示(也许是因为window的默认字符集是cp936吧),而要用isql -Usa -S服务名 -Jcp936,来正常显示汉字。
那么isql用cp936插入汉字数据后,在interactive sql中用utf8客户端字符集访问该表呢?在isql(用-Jcp936)
insert a1 values('中国',2) go
插入后,用select显示,汉字正常。在interactive sql中(utf8客户端字符集)用select 显示该表,插入的汉字显示也正常。再在isql中插入一条试试,该表的第一列为char(8)
insert a1 values('中国人啊',3) go
插入成功,用select 显示
select * from a1 go
咦为什么显示的是两条一样的’中国’,只有后面的int列分别为2和3?一想就明白了,utf8一般占3字符,所以char(8)不足以存放3个汉字,因而‘中国人啊’只有前两个汉字被截取插入,所以显示的是两行相同的“中国”。而cp850,实验证实占用两个字节。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/568.html