sql server全角字符与半角字符的检验
本文导语: 在sql server中,当半角字符F00000和全角字符F00000比较的结果是一样的,导致引起的重复的主键问题,全角的ASCII码是0xA3A8 ,而半角的是0x28。 为何SQL Server会认为是一样的呢? 原因分析: 这在于数据库的排序规则上: S...
在sql server中,当半角字符F00000和全角字符F00000比较的结果是一样的,导致引起的重复的主键问题,全角的ASCII码是0xA3A8 ,而半角的是0x28。
为何SQL Server会认为是一样的呢?
原因分析:
这在于数据库的排序规则上:
SQL Server的排序规则由这样几部分组成,代码页、区分大小写、区分重音、区分宽度。
区分宽度:指定 SQL Server 区分相同字符的单字节表示法(半角)和双字节表示法(全角)。
如果没有选择,则 SQL Server 将认为相同字符的单字节表示法和双字节表示法等效。
缺省,安装SQL Server中文版的时候,SQL Server帮你选择的排序规则是Chinese_PRC_CI_AS(Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive),是中文,不区分大小写、区分重音、不区分假名、不区分宽度。
因此,自然就认同F00000=F00000;
所以,正确的选择就是后缀为WS的中文排序规则。
以下介绍的例子中,应该选择Chinese_PRC_CI_AS_WS。
来看一下,指定排序规则是Chinese_PRC_CI_AS_WS后,会如何?
collate Chinese_PRC_CI_AS_WS
(所影响的行数为 0 行)
注意:查看使用哪个排序规则,可以使用如下的sql语句:
FROM ::fn_helpcollations()
可以查询所有排序规则的信息。
查出所有中文排序规则的信息:
(
SELECT *
FROM ::fn_helpcollations()) A
WHERE name like 'Chinese%'