免费注册 查看新帖 |

Chinaunix

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

请问我的IDS11.5数据库char、nchar字段没有区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-14 09:51 |只看该作者 |倒序浏览
5可用积分
请问我的IDS11.5数据库char、nchar字段没有区别?
我用的是utf8编码
表test
字段name1    char(6)
字段name2    nchar(6)
insert into test values("我abc123","他abc123")
select * from test
显示——我abc   他abc
怎么没有区别?从结果看,一个汉字占3个字符位,一个汉字+3个字符刚好占去6个字符位。
ncahr的结果跟预想的不一样。错在哪?设置的问题吗?谢谢!

最佳答案

查看完整内容

char 汉字 4000 gb2312 字符 4000*2 utf-8 4000*3nchar 汉字 4000 gb2312 字符 4000*2 utf-8 4000*3不知道你看的什么书,那样理解是不对的!char 和nchar 本质是一样的,只是系统在排序问题上才可能分开处理!参考: 25118250 SQL指南_语法.pdf第66页 技巧: CHAR(n)与NCHAR(n)数据之间的唯一区别是数据的排序和比较方式不相同.可以在CHAR(n)列中存储非英文字符.然而,由于数据库服务器使用代码集顺序来对CHAR(n)列中执行任何排序或比较, ...

论坛徽章:
0
2 [报告]
发表于 2009-08-14 09:51 |只看该作者
原帖由 zxe 于 2009-8-16 07:06 发表
这东西看了难理解,还需要老师指点。
书上说char:汉字4000,字符8000
       nchar:汉字4000,字符4000
可结果不是。请解惑?谢谢!


char 汉字 4000 gb2312 字符 4000*2 utf-8 4000*3
nchar 汉字 4000 gb2312 字符 4000*2 utf-8 4000*3

不知道你看的什么书,那样理解是不对的!

char 和nchar 本质是一样的,只是系统在排序问题上才可能分开处理!

参考: 25118250 SQL指南_语法.pdf

第66页 技巧: CHAR(n)与NCHAR(n)数据之间的唯一区别是数据的排序和比较方式不相同.
可以在CHAR(n)列中存储非英文字符.然而,由于数据库服务器使用代码集顺序来对CHAR(n)列
中执行任何排序或比较,所以可能无法获得具有你所期望的顺序的结果

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2009-08-14 10:11 |只看该作者
怀疑由于你使用的数据库是以utf编码...故所有的存储均使用这样的方式..

在我使用的zh_CN.GBK字符集时.
create table tt1 ( t1 char(6),t2 nchar(6));
insert into tt1 values("我abcd1234","他abcd1234");

查询的结果是

> select * from tt1;

t1     t2     

我abcd 他abcd

1 row(s) retrieved.

论坛徽章:
0
4 [报告]
发表于 2009-08-14 10:32 |只看该作者
首先可以先确认汉字占的字节数:
select length(name1),length(name2) from test;
其次想问问你是否设置了客户机的语言环境,CLIENT_LOCAL DB_LOCAL环境变量设置了吗?如果设置了是多少?
数据库默认的语言环境应该是en_US.819,你看看你访问数据库的systables表中tabid为90 91的表对应的site字段值分别是多少?

论坛徽章:
0
5 [报告]
发表于 2009-08-14 11:02 |只看该作者

回复 #2 liaosnet 的帖子

如果用gb,那没错,一个汉字占两个字符位,问题是char与nchar为何没有区别?

论坛徽章:
0
6 [报告]
发表于 2009-08-14 11:07 |只看该作者

回复 #3 jily_cunix 的帖子

select length(name1),length(name2) from test;
显示6   6
CLIENT_LOCAL DB_LOCAL SERVER_LOCALE均设为zh_cn.utf8
systables表中tabid为90 91的表对应的site字段值均为zh_cn.57372,57372应该是utf8吧

论坛徽章:
0
7 [报告]
发表于 2009-08-14 13:29 |只看该作者
zh_cn.57372是UTF-8字符集。
NCHAR类型应该是在CLIENT_LOCALE与DB_LOCALE不一致时生效的吧,你的环境中设置的这两个值一致,不需要转换,NCHAR应该还是按CHAR类型处理的。
我的环境中目前不支持zh_cn.utf8,我也去找个包测试看看。

论坛徽章:
0
8 [报告]
发表于 2009-08-14 14:37 |只看该作者
这个char和nchar真的难区别!

这个只有在用的select  order by ,between,in,matches ,like的情况下可能有区别!

区别就是:char只支持代码页排序,nchar可以通过

SET COLLATION语句来支持多个本地化整理顺序的字符串进行排序!


例如:英语都分,es_au(澳大利亚),es_us(美国),es_gb(英国)
根据它们不同的语言环境,排序就有些区别,但如果是char,就区别不出来了!

在例如: 中文gb2312是拼音排序,big5是按部首排序,而unicode的汉字统一按部首排序,

如果你的database是utf-8,而用户环境是gb2312,或希望按拼音排序,char就做不到了,
而nchar就可以通过Clent_locale来实现,在+上内码utf-8到gb2312的转换,
我猜可以实现用户本地化输入输出吧,没测试过!


参考IBM Informix GLS 使用指南!
15107531.7z (1.48 MB, 下载次数: 64)

[ 本帖最后由 zhaowuxing 于 2009-8-14 15:08 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-08-14 15:17 |只看该作者
informix默认是不支持中文utf8吧?我的操作系统支持,按网上建议找了张informix的ILS的光盘,把zh_cn.utf8的字符集安装了。设了几个环境变量:
DB_LOCALE=zh_CN.utf8
CLIENT_LOCALE=zh_CN.utf8
LANG=ZH_CN.UTF-8
重启数据库实例,再新创建的库就跟楼主的环境一样了。
utf8的汉字是3字节滴。
同意楼上说的。不过我把CLIENT_LOCALE改成多个值 什么zh_cn.big5 en_us.utf8等,有的报错无法转换,有的能转换,但查询的数据汉字部分有乱码。
对于LOCALE本地化方式验证DATE MONEY类型的更明显些。

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
10 [报告]
发表于 2009-08-14 17:02 |只看该作者

回复 #8 jily_cunix 的帖子

要理解这个参考
IBM Informix 数据库设计与实现指南
IBM Informix GLS 用户指南
IBM Informix 用户定义的例程与数据开发者指南
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP