字符集转换的方式
本地字符集的转换:
Adaptive Server支持属于同一语言组的本地字符集之间的转换。如果服务器把一种本地字符集作为它的缺省值,则客户端字符集必须属于同一个语言组,此时可以在服务器上浏览所有客户端提交的数据。如下图:
图1-3 服务器端和客户端字符集属于同一语言组
本图中,服务器端与客户端使用的语言集与字符集都同属于组1(见表1-1),那么他们之间实现的就是本地字符集转换方式。
Unicode系统中的转换方式:
在Unicode系统中,由于服务器的缺省字符集为UTF-8,所以客户端字符集可以是任何语言组中的一种本地字符集。如下图:
图1-4Unicode系统中的字符集转换
上图中来自每一个客户端的数据经过服务器和每个客户端时,都会被正确转换,而无论每一个客户端选择的时哪个语言组的字符集,原因是ASE服务器端选择了缺省字符集UTF-8.
字符集转换类型
直接转换:
支持同一语言组内两种本地字符集之间的转换。例如,Adaptive Server支持CP437与CP850之间的转换,因为他们同属于第1语言组。
Unicode转换:
Unicode转换可应用于所有本地字符集,在两种本地字符集之间进行转换时,Unicode转换方式把Unicode作为中间字符集。例如,在服务器缺省字符集CP437和客户端字符集CP860之间进行转换时,CP437先被转换成Unicode,Unicode再转换成CP860。
Unicode转换方式既可以用于服务器缺省字符集UTF-8,还可用于本地字符集。除非使用服务器缺省字符集UTF-8,否则您必须专门配置您的服务器才能使用Unicode转换方式(配置方法请参看配置篇之如何配置字符集的转换类型)。
如何选择字符集的转换方式
这将取决于系统的类型。
在非Unicode系统中,服务器和客户端的字符集为本地字符集,因此可以使用Adaptive Server直接转换,但是有些字符集没有直接转换,这种情况就必须使用Unicode转换了。
如下表所示:
表1-5 字符集转换方式
――如果系统中使用的所有字符集都在表1-5的列1中,则使用直接转换。前提是所有字符集同属于一个语言组。
――如果系统中使用的所有字符集都在表1-5的列2中,或者有些在列1中,有些在列2中,那么必须配置服务器使用Unicode转换方式。前提是所有字符集同属于一个语言组。
在Unicode系统中,如果服务器缺省字符集为Unicode UTF-8,那么所有的转换将在UTF-8与客户端使用的本地字符集之间进行,因此,在Unicode系统中,只能使用Unicode转换。
2. 配置篇
2.1 如何配置字符集的转换类型
禁用字符集转换的配置方法
在isql环境中执行:
1>; sp_configure “disable character set conversion”,1
2>; go
“disable character set conversion”参数默认配置值为0,即启用字符集转换。
如何配置字符集的转换类型
把”enable unicode conversions”参数设置为1或者2。当配置为1时,此设置使用直接转换或Unicode转换;当配置为2时,此设置使用Unicode转换;默认配置值为0,使用直接转换。
在isql环境中执行:
1>; sp_configure ”enable unicode conversions”,1
2>; go
2.2 如何配置服务器端缺省字符集
直接转换法
直接转换法是指直接使用Sybase提供的实用程序,如UNIX平台上使用sqlloc命令或者编辑sqlloc.rs脚本文件;Windows平台使用“服务器配置”图形化管理工具直接配置服务器端字符集。
使用直接转换法的条件是:
――服务器中没有用户数据
――对服务器中用户数据的损坏是可以接受的
――绝对确定服务器中的数据只使用ASCII-7字符集
间接转换法
间接转换法相对于直接转换法而言,需要通过一下三步来完成配置工作:
1. 先将服务器端的数据使用bcp命令导出
2. 再选择直接转换法之中的一种方式配置服务器端字符集
3. 再使用带有-J 参数的bcp命令把数据导回服务器端
配置服务器端字符集的方法 sqlloc—适用于UNIX平台的命令
在$SYBASE_OCS/bin目录下执行:sqlloc,将出现一个图形化界面,在这个界面中您可以直接选择语言集,字符集,排序顺序,便很容易地就完成了配置工作。
编辑sqlloc.rs脚本文件
将$SYBASE-ASE/init/sample_resource_files/sqlloc.rs拷贝到$SYBASE_OCS/bin目录下,按以下黑体字提示编辑该文件:
sybinit.release_directory: /home/sybase―――输入Sybase产品的安装路径
sqlsrv.server_name: SYB125―――输入数据库服务器的名称
sqlsrv.sa_login: sa
sqlsrv.sa_password: ―――输入sa的口令,若为空,则什么也不填
sqlsrv.default_language: us_english―――输入想要配置的语言集
sqlsrv.language_install_list: USE_DEFAULT
sqlsrv.language_remove_list: USE_DEFAULT
sqlsrv.default_characterset: cp850―――输入想要配置的字符集
sqlsrv.characterset_install_list: USE_DEFAULT
sqlsrv.characterset_remove_list: USE_DEFAULT
sqlsrv.sort_order: binary―――输入想要配置的排序顺序
# An example sqlloc resource file...
# sybinit.release_directory: USE_DEFAULT
# sqlsrv.server_name: PUT_YOUR_SERVER_NAME_HERE
# sqlsrv.sa_login: sa
# sqlsrv.sa_password:
# sqlsrv.default_language: french
# sqlsrv.language_install_list: spanish,german
# sqlsrv.language_remove_list: USE_DEFAULT
# sqlsrv.default_characterset: cp437
# sqlsrv.characterset_install_list: mac,cp850
# sqlsrv.characterset_remove_list: USE_DEFAULT
# sqlsrv.sort_order: dictionary
保存已经修改好的sqlloc.rs脚本文件,执行以下命令:
sqllocres -r sqlloc.rs
注意屏幕上出现的提示信息,如无异常,则完成配置工作。
“服务器配置”图形化管理工具――适用于Windows平台
“服务器配置”管理工具提供了一个易于操作的图形化管理平台,根据工具中提示的信息,很容易就完成了字符集的配置工作,这里就不多讲了,请参看相关文档说明。
