存档

文章标签 ‘字符集’,文章数:8

第三方工具连接ASE时,主要使用的接口方法包括:open-client 、ADO.NET和 jdbc。 第三方工具主要包括: 使用open-client接口的工具有:PowerBuilder、DBArtisan、Werysoft QweryBuilder等;WinSQL有自己的数据链接库,类似open-client方式; 使用jdbc接口的工具有:Aqua Data Studio、DbVisualizer、RazorSQL、DBeaver、DBArtisan 等; 使用ADO.NET接口的工具有:Toad for Sybase等; 解决方法: 使用open-client接口时,不需要将disable character set convers设置为1,仅需要在客户端工具中将显示字符集调整为服务器端字符集,可能有时候也需要调整一下显示的字体。 使用jdbc接口时,需要将disable character set convers设置为1,并在jdbc的连接串中将charset设置为cp936。 对于服务器端字符集为:iso_1且参数disable character set convers为默认值0的环境,可在jdbc连接串中添加:?SQLInitString=set char_convert off&charset=cp936 因此: 如果disable character set convers设置为1,两种类型的工具都可以使用。 如果disable character set convers为默认值0,那么建议使用open-client接口的工具。 以上情况适用于服务器端为iso_1,cp936等字符集的情况。

  目前在ASE 15中支持简体中文字符的字符集有四种: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~0x7E,二是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字符集。   eucgb、cp836、gb18030仅支持区分大小写的排序顺序,utf-8支持不区分大小写的排序。

Sybase ASE15.0及以后的版本中的bcp命令实用工具中有个-Y参数,这个参数的作用是:禁用在服务器中的字符集转化,在使用bcp in时由bcp在客户端上执行字符集转化过程。 只有ASE15.0或更高版本中支持客户端unicode转化。 另外:所有字符集转化都是在bcp out期间在服务器中执行的。        

用sybase自带的客户端工具sybase central连接ase的时候,如果连接字符集设置不合适,查询结果中汉字会出现乱码。 如果ASE数据库的字符集为:iso_1或者cp850,执行: sp_configure "disable character set conversi",1 go 修改此配置参数,需要重启ASE服务器。 然后,在sybase central连接配置窗口中,将Character set调整为:cp936。必须设置Character set这个参数,否则sybase central中显示的汉字肯定是乱码,这和sybase central使用的jdbc驱动有关。 其实,将Character set也可以调整为:eucgb,gb18030,这些都是支持中文的字符集。 另外,如果ASE服务器的字符集为:cp936或者utf8,可以不用修改参数disable character set conversi为:1。仅仅通过调整Character set为:cp936 也能解决汉字显示乱码的问题。

安装中文语言支持、配置字符集

         windows平台上,Sybase ASE15.0.3安装完成后默认语言是:英语(us_english),默认字符集为:cp850cp850是一个西欧字符集,虽然也能使用cp850字符集保存汉字,但是不推荐在生产环境中使用该字符集。

         如果生产系统中Sybase ASE数据库仅考虑支持简体中文的话,则可以使用cp936或者utf8这两种字符集。如果需要国际化支持,那么需选择utf8字符集。

         在生产环境中,需要将默认字符集由cp850调整为utf8(或者调整成支持简体中文的cp936也可以,根据项目情况而定!),将默认语言调整为中文。

         备注:如果想设定ASE的默认语言为中文,必须先将默认字符集设定为utf8,才能设置默认语言为中文。否则会报错。

1查看当前数据库的默认字符集:

执行:

sp_configure "default character set id"

go

查看到Run Value为:2,执行:

select id,name from master..syscharsets where id=2

go

查看到当前字符集为:cp850

在Sybase ASE中默认的情况是对象名或者字段名区分大小写,数据库内的字符按照二进制进行排序。单字节字符就按照字符的ASCII值排序,对于多字节(如:一个汉字)字符则是按照第一个字节的ASCII值进行排序。此时,汉字的排序是没有意义的。 但是,有时候会遇到要求对象名或者对象字段名不区分大小写的情况。比如:将其他rdbms的数据库移植到sybase ASE数据库(比如:ASA,oracle等);业务系统要求对象名不区分大小写等场景。 本文介绍在Sybase ASE 15.0.3中调整字符集和排序顺序使得ASE不区分对象名和字段名的大小写。 在谈到数据库的字符集时,不得不提到数据库的排序顺序。字符集和排序顺序的关系如此紧密,必须同时调整二者才能实现在ASE中不区分对象名的大小写。 ASE中的字符集有很多种,随着版本的升级,好像字符集种类也是越来越丰富。在ASE11.9.2版本中还没有支持简体中文的字符集cp936,仅有eucgb这个中文字符集。在最新的ASE15.x版本中,可以用作简体中文的字符集有:cp936,eucgb,gb18030,utf8;支持繁体中文的字符集有:cp950,big5,big5hk,euccns,utf8。如果仅仅需要支持简体中文的话,那么用cp936足够了。考虑ASE数据库支持国际化,则可选用utf8。 如何既支持简体中文又能容纳繁体中文呢? 对于此问题,我感觉应该用utf8字符集。因为在ASE中简体或者繁体中文分别有不同的字符集,只能选择一个最“包容”,范围最广的字符集:utf8。 转入正题: 我的测试环境安装的ASE字符集为:iso_1,默认的字符集排序顺序为:bin__iso_1。无论对象名还是对象内的数据,都是严格区分大小写的。 第一步:检查数据库内是否安装了不区分大小写的iso_1字符集。 select id,name from master..syscharsets where name like ‘%iso_1%’ 查询结果为: 1> select id,name from master..syscharsets where name like ‘%iso_1%’ 2> go id  name — —————————— 50 bin_iso_1 1 iso_1   (2 rows affected) 说明数据库内安装有iso_1字符集和按照二进制值进行排序的bin_iso_1(排序顺序在其他rdbms中好像被称为collate,不太好翻译,有的翻译为“整理”,感觉很别扭。在mssqlserver和mysql中都有这个概念。) 第二步:安装不区分大小的iso_1的整理collate 切换到字符集目录下: cd %sybase%\charsets\iso_1 (unix下位:cd $SYBASE/charsets/iso_1) 发现D:\sybase\charsets\iso_1中有几个*.srt文件,它们分别对应不同的“整理”–排序顺序。 D:\sybase\charsets\iso_1>dir [...]

配置篇 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 平台使用 “ 服务器配置” 图形化管理工具直接配置服务器端字符集。 [...]

将Sybase的字符集调整为支持简体中文的cp936字符集。  步骤如下: (这里假设SYBASE的安装路径为c:\sybase)  1.c:\>cd \sybase\charsets\cp936 2.c:\sybase\charsets\cp936> charset -U用户名 -P密码 -S数据库服务器名称 binary.srt cp936 更改默认字符集为cp936 3.在SQL环境中 1>select name,id from syscharsets(会列出字符集对应的id号) 2>go 找到name为cp936对应的id(假设为171) .1>sp_configure “default character set id”,171 2>go 5.重启server两次 (注:第一次启动后,server会自动宕掉,需要第二次重启后才能使用) 启动之后,要清空日志。应该是sybase日志恢复时不会转换字符集吧,所以先前的日志没有作用了。要及时清除掉! 清空提交日志dump tran dbname with  truncate_only ===================================================================== SYBASE使用utf8字符集出现乱码问题的解决 于国际化的原因,现在使用sybase15.0.3字符集utf8作为默认字符集,现在客户端与服务端一致都配置成为 locale=default,us_english,utf8 ,发现使用客户端写入数据后,汉字全为乱码。在isql下用iso_1,cp850字符集连接上,查询已有数据汉字全为乱码。 解决的办法: 将客户端改为cp936,或者在isql连接的时候指定字符集为简体中文字符集cp936即-Jcp936。 问题解决! ps:在isql查看客户端字符集为:select @@client_csname 查看服务器的默认排序顺序:sp_configure “default sortorder” ———————————————————————————————————— ——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载; ——— 转载务必注明原始出处 : http://www.dbainfo.net ——— 关键字:  ASE [...]