免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4379 | 回复: 6
打印 上一主题 下一主题

讨论一下ASE的字符集 [复制链接]

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-11 19:14 |只看该作者 |倒序浏览
现在ase的缺省字符集是eucgb,也就是gb2312,但我发现如果不用univarchar或unichar或者其他unicode的客户程序例如java,client程序也都能正确识别汉字出来。
例如:"赟"这个字就不在gb2312里,而是存在于gbk(cp936)里,可是如果create table tb(str varchar(10)),然后insert tb values("赟")
然后怎么查也没有错嘛。那么把数据库的字符集升级到cp936甚至gb18030还有什么意义吗?
欢迎大家讨论,谢谢。

论坛徽章:
0
2 [报告]
发表于 2011-01-12 06:47 |只看该作者
不知道楼主那个gbk字符集中的汉字是怎么插入进去的。
我特意将server的字符集弄成eucgb(gb2312),

00:00000:00001:2011/01/12 06:17:13.25 server  ASE's default sort order is:
00:00000:00001:2011/01/12 06:17:13.25 server    'bin_eucgb' (ID = 50)
00:00000:00001:2011/01/12 06:17:13.25 server  on top of default character set:
00:00000:00001:2011/01/12 06:17:13.25 server    'eucgb' (ID = 170).

然后client端以cp936字符集方式强制连接,
D:\SybaseASE\ASE-15_0\bin>isql -Uspring -Jcp936
Password:
1> use iihero
2> go
1> insert into tb values('赟')
2> go
Msg 2402, Level 16, State 11:
Server '****', Line 1:
Error converting characters into server's character set. Some character(s) could
not be converted.
1> select @@client_csname
2> go

------------------------------
cp936

(1 row affected)

无法插入数据。

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2011-01-12 08:59 |只看该作者
你如果采用-Jeucgb就可以成功插进去。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2011-01-12 12:59 |只看该作者
回复 3# Eisen


     建议Esien看一下“赟”这个字在ASE中的编码。用dbcc page看一下。
因为早期的时候,很多用西欧字符集cp850来存储汉字,用cp850来存储汉字时,ASE只认识2个字节联在一起是一个汉字,其它就不管了。
我感觉,你的这个情况有点和cp850存储汉字类似。

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
5 [报告]
发表于 2011-01-12 13:06 |只看该作者
已经看过了,这个字在GBK里的编码是0xda53,用-Jeucgb的方式写入eucgb的数据库里也是0xda53,用-Jcp936的方式没法写进去,但是可以用select convert(varbinary,'赟')发现会把它转成unicode 0x8d5f。

现在有一个疑问——如果就一直保持数据库的字符集是eucgb而不是cp936或gb18030的话,会有什么不好的地方呢?

论坛徽章:
0
6 [报告]
发表于 2011-01-12 16:39 |只看该作者
你如果不用java,确实没有什么问题。数据库里头只不过存储的是一个内部编码形式。到了客户端,因为你的机器支持该字的显示。

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
7 [报告]
发表于 2011-01-12 17:09 |只看该作者
确实如此……不过如果就此不能用java了,实在有点可惜啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP