sybase字符集配置与转化

2. 配置篇

2.1如何配置字符集的转换类型

禁用字符集转换的配置方法
在isql环境中执行:
1> sp_configure “disable character set conversion”,1
2> go
“disablecharacter 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平台
“服务器配置”管理工具提供了一个易于操作的图形化管理平台,根据工具中提示的信息,很容易就完成了字符集的配置工作,这里就不多讲了,请参看相关文档说明。

2.3如何配置客户端缺省字符集
配置客户端缺省字符集实际上就是对“$SYBASE/locales”目录下locales.dat文件的修改。

Windows平台用写字板方式打开该文件,在UNIX平台可以直接使用“vi”命令打开该文件,我们会看到,该文将中所有字符集的配置都是以服务器端操 作系统平台名称分组的:
.
.
[aix]
locale = C, us_english, iso_1
locale = En_US, us_english, iso_1
locale = en_US, us_english, iso_1
locale = default, us_english, iso_1
locale = En_US.IBM-850, us_english, cp850
locale = en_JP, us_english, eucjis
locale = Fr_FR, french, cp850.
.
[axposf]
locale = C, us_english, iso_1
; Use Posix Locales, straight from the Posix Guidelines
locale = en_US.88591, us_english, iso_1
locale = fr_FR, french, iso_1
locale = zh_CN, chinese, eucgb
locale = zh_TW, tchinese, euccns
locale = ko_KR, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1
.
.
其中,操作系统名称放在每一组最开始的“[]”中,而且请注意上面黑体字,每一组中都会存在一行“locale = default,…”。我们要修改客户端的默认字符集,就是对这一行进行修改。

例如,某系统服务器端是SUN平台,服务器端语言集为english,字符集为cp850。我们要修改客户端字符集与服务器端一致,怎么做? 首先找到[SUN]操作系统分组,然后修改“locale = default,…”为“locale = default,us_English,cp850”。
修改前:
[sun]
; from JLE, KLE, CLE, OS/4.1.1, man setlocale()
; and Sun Software Internationalization Guide (p/n 800-5972-08)
; use setenv LC_CTYPE, LC_MESSAGES, LANG
locale = C, us_english, iso_1
locale = fr, french, iso_1
locale = de, german, iso_1
locale = tr, us_english, iso88599
locale = zh, chinese, eucgb
locale = zh_CN, chinese, eucgb
locale = zh_TW, tchinese, euccns
locale = ko, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1

修改后:
[sun]
; from JLE, KLE, CLE, OS/4.1.1, man setlocale()
; and Sun Software Internationalization Guide (p/n 800-5972-08)
; use setenv LC_CTYPE, LC_MESSAGES, LANG
locale = C, us_english, iso_1
locale = fr, french, iso_1
locale = de, german, iso_1
locale = tr, us_english, iso88599
locale = zh, chinese, eucgb
locale = zh_CN, chinese, eucgb
locale = zh_TW, tchinese, euccns
locale = ko, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, cp850

保存该文件,就完成对客户端字符集的修改了。

这里,还要说明一种特殊情况:
为了满足服务器端某些应用的特殊需求,在服务器端设置了一个环境变量:LANG,此时客户端字符集该如何设置呢?

例如,某系统服务器端是Windows平台,使用语言集english,字符集iso_1,并设置环境变量LANG=C。我们要修改客户端字符集与服务器 端一致,怎么做?

首先找到[NT]操作系统分组,然后在该组中加入一行
“locale= C,us_English,iso_1”
修改前:
[NT]
locale = enu, us_english, iso_1
locale = fra, french, iso_1
locale = deu, german, iso_1
locale = japanese, japanese, sjis
locale = chs, chinese, eucgb
locale = cht, tchinese, big5
; locale = kor, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1

修改后:
[NT]
locale = enu, us_english, iso_1
locale = fra, french, iso_1
locale = deu, german, iso_1
locale = japanese, japanese, sjis
locale = chs, chinese, eucgb
locale = cht, tchinese, big5
; locale = kor, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1
locale = C,us_English,iso_1
因此在修改客户端字符集之前,请先查看服务器端是否设置了环境变量“LANG“,再决定如何修改。

2.4如何选择ASE字符集使之支持简体中文字符
目前在ASE12.5中支持中文字符的字符集有四种:CP936,EUCGB,UTF-8和GB18030。

其中EUCGB字符集是基于GB2312-80编码规范的,它的EUC (Extended Unix Code)编码范围是第一字节0xA1~0xFE(实际只用到0xF7),第二字节0xA1~0xFE。

CP936字符集是基于GBK编码规范(实际上的国家标准是GB13000-90),是对GB2312进行的扩展,第一字节为0×81~0xFE,第二字 节分两部分,一是0×40~0×7E,二是0×80~0xFE。其中和GB2312相 同的区域,字完全相同。

GB18030字符集(国家标准号是GB18030-2000)是2000年3月17日发布的新的中文编码标准。它是GB2312的扩充,采用单/双/四 字节编码体系结构,收录了27000多个汉字以及臧文、蒙文、维吾尔文等主要的少数民族文字。Sybase从ASE 12.5.0.3之后开始支持GB18030字符集。

UTF-8字符集是现有ASCII系统向Unicode转换的一个过渡方案。它使用1-3字节表示一个字符。简体中文的每个字符在utf8中的长度基本上 都是3个字节。它的最主要的优点是可以同时支持超过650种语言的字符。缺点是针对中文字符来说,需要增加50%的空间用来存储。还有一个问题是执行sp_helptext显示存储过程体的时候,有可能出现半个汉字。

一般来说,由于EUCGB不支持国标一、二级字库以外的汉字,所以我们推荐用户在服务器端和客户端都使用CP936字符集,或者在ASE 12.5.0.3之后还可以使用GB18030字符集,它可以支持一些比较生僻的汉字。它的不足是只有一种排序方式,即区分大小写的Binary方式。所 以,如果需要使用支持中文字符集且不区分大小写的数据库时,就只能使用UTF-8作为服务器端字符集,而客户端使用CP936或GB18030字符集。

另外,还有一种选择是,服务器端和客户端都使用iso_1字符集,虽然iso_1字符集并不直接支持中文字符,但我们将服务器端和客户端都设置成iso_1字符集后,系统也不会在客户端和服务器端进行字符转换,它只不过将一个汉字的两个字节当做两个单独字符来处理,一般情况下没有问题。但当执行like匹配查询的时候,它有可能返回不正确的结果,原因是服务器端是根据单字节去匹配查询条件的,很可能会有前一个汉字的第二字节与后一个汉字的第一字节的内码组合符合查询条件,被服务器端作为查询结果返回来。

2.5如何查看服务器端、客户端字符集
查看服务器端字符集:
在isql环境中执行:
1> sp_helpsort
2> go
查看客户端字符集:
在isql环境中执行:
1> select @@client_csname
2> go

3.错误处理篇
3.1为什么会出现字符集转换失败

1.当字符存在于客户端字符集中但在服务器字符集中不存在时,AdaptiveServer的字符集转换将报告转换错误,反之亦然。
用户会碰到下面的错误消息:
Msg 2402,Severity 16 (EX_USER):
Error converting client characters into server’s character set. Somecharacter(s) could not be converted.
转换错误会阻止插入与更新语句的执行。如果发生此情况,请检查数据中有问题的字符并替换它们。

2.当客户端发送数据时Adaptive Server遇到转换错误,它用ASCII码的问号(?)代替可疑字符所占字节,但查询批处理继续进行直到完成为止。
语句完成后,AdaptiveServer将发送一下消息:
Msg 2403,Severity 16 (EX_USER):
WARNING! Some character(s) could not be converted into client’s character set. Unconvertedbytes were changed to question marks (`?’)。

3.当在客户端查询服务器端存储的数据时,当碰到中文汉字,在客户端显示乱码的现象,且没有任何提示信息。这是我们在应用中经常会碰到的现象,产生的原因是: 客户端与服务器端字符集不符。怎么解释呢?假设我们先期设置服务器端字符集为iso_1,客户端字符集也为iso_1,然后我们从客户端向服务器端录入了 所有的数据;之后当我们需要查询时,使用的客户端,它的字符集为cp850,那么势必在该客户端上显示的字符集为乱码。

当出现这种情况时,最好配置客户端字符集为先期客户端使用的字符集或者配置客户端字符集与服务器端字符集一致,使得客户端字符集与服务器端字符集匹配。这里我们不建议用户修改服务器端字符集,因为服务器中此时已经存在大量的数据,在使用直接转换方式时,由于源字符集与目的字符集中可能存在无法转换的字符而 导致Adaptive Server无法启动;如果使用间接的转换方式,会增加工作量。

4.附:如何安装cp936字符集
以在Windows平台安装cp936字符集为例,说明如何安装使用服务器中没有被默认安装的字符集。(在ASE 12.5.0.3版本中安装GB18030字符集的方法类似)
(这里SYBASE的安装路径为c:/sybase)
1.c:/>cd /sybase/charsets/cp936
2.c:/sybase/charsets/cp936> charset -Usa -Psa_pass -Sserver_name binary.srtcp936
3.在SQL环境中1>select name,id from syscharsets
2>go
找到name为cp936对应的id(假设为171)
4.1>sp_configure "default character set id",171
2>go

5.重启server两次
(注:第一次启动后,server会自动宕掉,需要第二次重启后才能使用)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sybase ASE 15.7 开发文档:系统管理指南(卷一)共两卷 第 1 章系统管理概述 .......... 1 Adaptive Server 管理任务 .......... 1 系统管理任务所需的角色 .......... 2 使用 isql 执行系统管理任务 .......... 4 将 Sybase Central 用于系统管理任务 .......... 6 系统表 .......... 6 查询系统表 .......... 7 系统表中的键 .......... 8 更新系统表 .......... 8 系统过程 .......... 9 使用系统过程 .......... 9 系统过程表 .......... 10 创建系统过程 .......... 10 系统扩展存储过程 .......... 11 创建系统 ESP .......... 11 记录错误消息 .......... 12 连接到 Adaptive Server .......... 12 interfaces 文件 .......... 12 目录服务 .......... 13 LDAP 作为一个目录服务 .......... 14 Adaptive Server 中可用的安全性功能 .......... 16 第 2 章系统及可选数据库 .......... 19 系统数据库概述 .......... 19 master 数据库 .......... 21 控制 master 数据库中的对象创建 .......... 22 备份 master 数据库并保留系统表的副本 .......... 22 model 数据库 .......... 23 sybsystemprocs 数据库 .......... 24 tempdb 数据库 .......... 24 创建临时表 .......... 25 sybsecurity 数据库 .......... 25 sybsystemdb 数据库 .......... 26 sybmgmtdb 数据库 .......... 26 pubs2 和 pubs3 样本数据库 .......... 26 维护样本数据库 .......... 27 pubs2 image 数据 .......... 27 dbccdb 数据库 .......... 27 sybdiag 数据库 .......... 28 确定安装脚本的版本 .......... 28 第 3 章系统管理入门 .......... 29 逻辑页大小 .......... 29 使用“测试”服务器 .......... 30 计划资源 .......... 30 达到性能目标 .......... 30 安装 Sybase 产品时的注意事项 .......... 31 检查产品的兼容性 .......... 31 安装或升级 Adaptive Server .......... 31 安装其它第三方软件 .......... 31 配置并测试客户端连接 .......... 32 分配物理资源 .......... 32 专用服务器与共享服务器 .......... 32 决策支持和 OLTP 应用程序 .......... 33 预先的资源计划 .......... 33 操作系统配置 .......... 33 备份和恢复 .......... 34 保留 master 的最新备份 .......... 34 自动备份过程 .......... 35 备份数据库前检验数据一致性 .......... 36 监控日志大小 .......... 36 即时维护和故障排除 .......... 37 启动和停止 Adaptive Server .......... 37 查看和清理错误日志 .......... 37 保留记录 .......... 37 联系信息 .......... 38 配置信息 .......... 38 维护日程表 .......... 38 系统信息 .......... 39 灾难性事故恢复计划 .......... 39 其它资源 .......... 39 第 4 章管理和监控 Adaptive Server .......... 41 Sybase Control Center for Adaptive Server .......... 41 Adaptive Server Sybase Central 插件 .......... 42 使用 Adaptive Server 插件 .......... 43 启动和停止 Sybase Central .......... 44 注册 Adaptive Server 插件 .......... 44 执行常见任务 .......... 45 使用 Interactive SQL .......... 51 第 5 章设置配置参数 .......... 53 概述 .......... 53 Adaptive Server 配置文件 .......... 54 修改配置参数 .......... 54 用于修改配置参数的必需角色 .......... 54 使用 sp_configure 的单位规范 .......... 56 全局与会话设置 .......... 56 获取有关配置参数的帮助信息 .......... 57 使用 sp_configure .......... 58 语法元素 .......... 59 将 sp_configure 与配置文件结合使用 .......... 59 参数层次 .......... 63 参数层次中用户定义的子集:显示级别 .......... 65 使用 sp_configure 和 sp_sysmon 进行性能调优 .......... 66 在集群环境中使用配置参数 .......... 66 sp_configure 输出 .......... 67 命名高速缓存配置参数 .......... 69 sysconfigures 和 syscurconfigs 表 .......... 69 查询 syscurconfigs 和 sysconfigures:示例 .......... 70 配置参数 .......... 70 按字母顺序排列的配置参数列表 .......... 70 第 6 章磁盘资源问题概述 .......... 257 设备分配和对象放置 .......... 257 用于管理磁盘资源的命令 .......... 258 存储管理决策中需要考虑的事项 .......... 259 恢复 .......... 259 性能 .......... 260 安装时的状态和缺省值 .......... 261 用于管理存储的系统表 .......... 261 sysdevices 表 .......... 262 sysusages 表 .......... 263 syssegments 表 .......... 263 sysindexes 表 .......... 264 syspartitions 表 .......... 264 第 7 章管理远程服务器 .......... 265 概述 .......... 265 管理远程服务器 .......... 266 添加远程服务器 .......... 267 管理远程服务器名 .......... 268 设置服务器连接选项 .......... 268 获取有关服务器的信息 .......... 270 删除远程服务器 .......... 270 添加远程登录名 .......... 271 映射用户的服务器 ID .......... 271 将远程登录名映射为特定的本地名 .......... 271 将所有的远程登录名映射到一个本地名 .......... 272 在本地服务器中保留远程登录名 .......... 272 远程用户登录映射的示例 .......... 273 远程用户的口令检查 .......... 274 使用 untrusted 模式的效果 .......... 275 获取有关远程登录的信息 .......... 275 远程登录的配置参数 .......... 276 第 8 章初始化数据库设备 .......... 277 数据库设备 .......... 277 使用 disk init 命令 .......... 278 disk init 语法 .......... 278 指定逻辑设备名 .......... 278 指定物理设备名 .......... 279 选择设备号 .......... 279 指定设备大小 .......... 279 指定 dsync 设置(可选) .......... 281 使用 directio 绕过操作系统缓冲区 .......... 282 disk init 的其它可选参数 .......... 283 获取有关设备的信息 .......... 284 删除设备 .......... 285 指派缺省设备 .......... 286 选择缺省设备和非缺省设备 .......... 286 使用 disk resize 增加设备大小 .......... 287 磁盘空间不足 .......... 288 第 9 章设置数据库选项 .......... 289 使用 sp_dboption 过程 .......... 289 数据库选项说明 .......... 290 查看数据库的选项 .......... 291 用 sysoptions 显示当前设置的开关 .......... 292 第 10 章配置字符集、排序顺序和语言 .......... 295 了解国际化和本地化 .......... 295 国际化系统的优点 .......... 296 国际化系统示例 .......... 296 国际化系统的元素 .......... 299 为服务器选择字符集 .......... 299 Unicode .......... 301 选择服务器缺省字符集 .......... 305 选择排序顺序 .......... 307 使用排序顺序 .......... 308 不同类型的排序顺序 .......... 308 选择缺省排序顺序 .......... 309 为系统消息选择语言 .......... 315 设置服务器:示例 .......... 316 西班牙语版服务器 .......... 316 总部在美国的日本公司 .......... 317 具有多国客户端的日本公司 .......... 317 更改字符集、排序顺序或消息语言 .......... 318 更改缺省字符集 .......... 318 用资源文件更改排序顺序 .......... 319 更改缺省排序顺序 .......... 320 重新配置字符集、排序顺序或消息语言 .......... 320 Unicode 示例 .......... 320 预备步骤 .......... 322 设置用户的缺省语言 .......... 323 重新配置后的恢复 .......... 323 处理可疑分区 .......... 326 安装不支持语言的日期字符串 .......... 327 服务器与客户端之间的日期解释 .......... 328 国际化和本地化文件 .......... 329 国际化文件的类型 .......... 329 字符集目录结构 .......... 329 本地化文件的类型 .......... 330 软件消息目录结构 .......... 331 消息语言和全局变量 .......... 332 第 11 章配置客户端/ 服务器字符集转换 .......... 333 字符集转换 .......... 333 支持的字符集转换 .......... 334 本地字符集的转换 .......... 334 Unicode 系统中的转换 .......... 334 Adaptive Server 直接转换 .......... 335 Unicode 转换 .......... 336 选择转换类型 .......... 337 非 Unicode 客户端/ 服务器系统 .......... 337 Unicode 客户端/ 服务器系统 .......... 338 配置服务器 .......... 339 启用和禁用字符集转换 .......... 339 无法转换的字符 .......... 340 字符集转换中的错误处理 .......... 340 转换和数据长度的变化 .......... 341 配置系统和应用程序 .......... 342 为实用程序指定字符集 .......... 342 显示和文件字符集的命令行选项 .......... 343 第 12 章诊断系统问题 .......... 345 Adaptive Server 如何使用错误消息 .......... 345 错误日志格式 .......... 346 错误消息和消息号 .......... 348 错误消息文本中的变量 .......... 349 Adaptive Server 错误记录 .......... 349 严重级 .......... 350 严重级 10-18 .......... 350 严重级 19-26 .......... 353 报告错误 .......... 355 Backup Server 错误记录 .......... 355 注销进程 .......... 356 仅将注销用于状态 .......... 359 使用 sp_lock 检查阻塞进程 .......... 360 管家功能 .......... 360 管家清洗 .......... 361 管家杂事 .......... 361 管家碎片收集 .......... 361 配置 enable housekeeper GC .......... 362 关闭服务器 .......... 363 关闭 Adaptive Server .......... 363 关闭 Backup Server .......... 364 了解已知的问题 .......... 365 索引 ..........367
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值