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

在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 区分相同字符的单字节表示法(半角)和双字节表示法(全角)。为空时不区分。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值