贝网博客

我的分类
流水记事
源码下载
Asp.net
其它
数据库
Javascript
.Net技术
我的相册
友情链接
博客园
CSDN博客
Start0
最新回复
嗷嗷的cCC
fasdfasdf
[:..
lz这个东西好厉害,我..
哈哈,好照片
不错,以前一直用黄色..
终于找到支持ff的修正..
终于找到支持ff的修正..
新鲜性
看看,试试,好不好使。
分类 =》数据库
让SqlServer区分大小写,区分全半角
发表于:2011-01-14 16:10:43
更新于:2011-11-18 10:27:35

今天程序出错了,经过调查,发现是存储过程里拆分字符串时,把全角当成半角处理了,搜索了一下,才明白这是数据库的排序规则造成的,简单介绍一下:

0、先说应用吧:
SELECT CHARINDEX(N';', '全角分号;', 1)    --返回5,因为默认不区分全半角
SELECT CHARINDEX(N';', '全角分号;' collate Chinese_PRC_CI_AS_KS_WS, 1)--返回0,WS区分全半角
SELECT CHARINDEX(N'b', 'ABC', 1)    --返回2,因为默认不区分大小写
SELECT CHARINDEX(N'b', 'ABC' COLLATE Chinese_PRC_CS_AI, 1)--返回0,CS区分大小写

1、查看指定数据库的默认排序规则,在数据库上按右键,在属性的常规里,
     或者使用Sql语句:SELECT collation_name FROM sys.databases WHERE [name] = '你的数据库名'
     一般中文系统的默认排序规则是:Chinese_PRC_CI_AS,即不区分大小写,区分重音(如"a"不同于"á"),这种情况下,也不区分全角和半角

2、查看系统支持的全部排序规则:SELECT * FROM ::fn_helpcollations()
     查看中文排序规则:select * from ::fn_helpcollations() where name like 'Chinese_PRC_%'

3、规则简要说明:
     上面的sql查找出的name字段,开头是语言,比如简体中文为Chinese_PRC,繁体中文为Chinese_Taiwan,匈牙利为Hungarian
     接着是排序规则了,规则意义如下,可以组合,比如 _CI_AS 表示不区分大小写,区分重音

_BIN 二进制排序
_BIN2 二进制-码位排序顺序(SQL Server 2005 的新增功能)
_CI 不区分大小写
_CS 区分大小写
_AI 不区分重音
_AS 区分重音
_KI 不区分假名类型
_KS 区分假名类型
_WI 不区分宽度(可以认为是 不区分全角和半角)
_WS 区分宽度(可以认为是 区分全角和半角)
_Stroke 按照笔画顺序进行排序
_90 支持GB18030标准排序,参考http://msdn.microsoft.com/zh-cn/library/ms180991.aspx

4、系统支持的常用组合:

_CI_AI 不区分大小写、不区分重音、不区分假名、不区分全半角。
_CI_AI_KS 不区分大小写、不区分重音、区分假名、不区分全半角
_CI_AI_KS_WS 不区分大小写、不区分重音、区分假名、区分全半角
_CI_AI_WS 不区分大小写、不区分重音、不区分假名、区分全半角
_CI_AS 不区分大小写、区分重音、不区分假名、不区分全半角
_CI_AS_KS 不区分大小写、区分重音、区分假名、不区分全半角
_CI_AS_KS_WS 不区分大小写、区分重音、区分假名、区分全半角
_CI_AS_WS 不区分大小写、区分重音、不区分假名、区分全半角
_CS_AI 区分大小写、不区分重音、不区分假名、不区分全半角
_CS_AI_KS 区分大小写、不区分重音、区分假名、不区分全半角
_CS_AI_KS_WS 区分大小写、不区分重音、区分假名、区分全半角
_CS_AI_WS 区分大小写、不区分重音、不区分假名、区分全半角
_CS_AS 区分大小写、区分重音、不区分假名、不区分全半角
_CS_AS_KS 区分大小写、区分重音、区分假名、不区分全半角
_CS_AS_KS_WS 区分大小写、区分重音、区分假名、区分全半角
_CS_AS_WS 区分大小写、区分重音、不区分假名、区分全半角

发表评论
名称(*):
邮箱:
正文:

©2008 Beinet.cn 版权所有