SQL Server中全角半角字符查询使用的详细说明

来源:互联网 发布:java cpu利用率 编辑:程序博客网 时间:2024/05/17 01:04

在SQL Server数据库安装的时候,需要选择排序方式,一般默认为:Chinese_PRC_CI_AS。
选择“Chinese_PRC_CI_AS”后,那么对于全角半角字符的区别是忽略,也就说会有不期望的记录出现在结果集中。
如果某系统同时存在“C用户”(全角)和“C用户”(半角),并且排序规则为“Chinese_PRC_CI_AS”时,那么在登录用户名验证时,会返回两条记录,对于登录验证来说这样的错误是致命的!

问题:

SELECT * FROM users WHERE name = 'C用户' COLLATE Chinese_PRC_CI_AS
返回:“C用户”和“C用户”

解决方案:

SELECT * FROM users WHERE name = 'C用户' COLLATE Chinese_PRC_CI_AS_WS
返回:“C用户”

心得:

我们在进行中文值比对时,最好在SQL语句里跟上排序规则显式指定语句:COLLATE Chinese_PRC_CI_AS_WS,这样可以做到既不影响全局设置,又使当前SQL语句运行期望的排序规则,增加了SQL语句的安全性和可靠性。

排序规则说明(详见:SQL联机丛书中的“Windows 排序规则排序样式”):
Chinese_PRC_CI_AS_WS

Chinese_PRC:排序规则名。详见:SQL联机丛书中的“SQL 排序规则名称”。
CI:指定不区分大小写;另可指定CS,表示区分大小写。
AS:指定不区分重音;另可指定AS,表示区分重音。
WS:指定 SQL Server 区分相同字符的单字节表示法(半角)和双字节表示法(全角)。为空时不区分。