1. 苏葳的备忘录首页
  2. 数据库

Sybase12.5在winxp下的安装,配置及更改字符集

sybase 字符集数据库产品在金融行业一般都有较长的生命期。因为以安全稳定为第一要求的金融行业不可能频繁的更换数据产品,导致一些产品的使用周期长达10年以上。Sybase12.5于2001年发布,现在仍在一些银行广泛使用。由于发布时windows xp还未推出,导致在xp上安装Sybase及字符集设置时出现一些问题。当然xp系统不可能做为生产数据服务端使用,但在作为测试环境或备份数据,历史查询系统的数据存储服务器时仍有使用价值。

首先是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

发表评论

邮箱地址不会被公开。 必填项已用*标注