[b]这是去年被困扰的问题,围绕服务端和客户端自己的字符集不一致的问题[/b]


安装完Sybase后,很多人在使用isql或程序插入中文数据后发现,查询出的数据是乱码(中文字符全为‘?’),这是因为客户端的字符集和服务端的字符集不一致造成的,Sybase默认安装后默认字符集为:iso_1。通常使用中文字符集在Sybase内是cp936。那么如何设置Sybase的字符集呢?修改方法如下:
以Windows操作系统Sybase15为例:

首先说明察看服务端字符集和客户端字符集的方法:

查看服务器端字符集:

在isql环境中执行:

1>; sp_helpsort

2>; go

查看客户端字符集:

在isql环境中执行:

1>; select @@client_csname

2>; go

修改服务端字符集方法:

假设sybase安装目录为$sybase$

◆1.转到$sybase$\ASE-15_0\bin目录

执行命令:charset -Usa -P binary.srt cp936

◆2.打开isql,执行下面的SQL查询出cp936对应的id

select id , name from syscharsets where name = 'cp936'

go

假设查询结果为171

执行下面语句设定默认字符集

sp_configure 'default char',171 --可能有误,以上面的查询结果为准

go

关闭ASE

shutdown

go

◆3.重新启动sybase服务两次(第一次启动会失败),启动服务。

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

sybase字符集转换
这篇文章是做项目的时候从sybase中国网站上找到的,相当不错,记录下来,以备后用



1. 概念篇
  1.1 什么是字符集?
  1.1 什么是字符集?
  1.2 什么是排序顺序?
  1.3 什么是字符集转换?

  2. 配置篇
  2.1 如何配置字符集的转换类型
  2.2 如何配置服务器端缺省字符集
  2.3 如何配置客户端缺省字符集
  2.4 如何选择ASE字符集使之支持简体中文字符
  2.5 如何查看服务器端、客户端字符集 
 3. 错误处理篇
  3.1 为什么会出现字符集转换失败 
  4. 附:如何安装cp936字符集

  1. 概念篇
  1.1 什么是字符集?
  字符集是字符(包含字母,数字,符号和非打印字符等)以及所指定的内码所组成的特定的集合。通常一个字符集包含一个字母表中的字符,例如拉丁字母表被使用在英语语言中,那么如果要使用拉丁字符,就要配置使用英语语言集中的特定的字符集合――拉丁语言字符集。这里为什么特指了是英语语言集呢?因为字符集是基于某种操作系统平台和某种语言集支持的。语言集的集合被称为语言组,它可能包含一种或多种语言。本地字符集是基于特定语言组中所包含的一种或多种语言支持的,在特定操作系统平台上编码的集合。

  在Client/Server系统中,支持多语言的数据处理,但是所有的语言必须属于同一个语言组。例如,从下表可以看出,如果服务器中的数据用组1中的字符集,则同一数据库中可以有法语,德语,英语以及该组中的其它语言。而在这个数据库中就不能同时存储日语,法语了。

  这里请注意一个非常特别的字符集—Unicode—它支持世界上超过650种语言的国际字符集。Unicode允许在同一服务器上混合使用不同语言组的不同语言。



  表1-1 Adaptive Server支持的语言和字符集


  注意:表中所显示的所有字符集,因为任何字符集的前128(十进制)个字符都包含拉丁字母表,所以所有字符集都支持英语。各字符集中前128个字符之外的字符各不相同,用于支持不同的本地语言字符。

  1.2 什么是排序顺序?
  每种字符集都有一种或多种排序顺序,Adaptive Server使用它们存储数据。排序顺序与特定的语言或语言组及特定的字符集联系密切,不同的语言对同样字符的排序是不同的,因此,需要特定语言的排序顺序,以便正确地对字符进行排序。另外,排序顺序与特定地字符集也密切相关,对于特定字符集可使用的排序顺序位于字符集目录的排序顺序定义的文件中(.srt文件)。
  有关字符集及其可用排序顺序的列表,如下所示:
  表1-2可用的排序顺序