SQLSERVER⽣僻字查询问题和关键字COLLATE
先说问题,⽣僻字查询的问题,有的时候我们的数据⾥包含⼀些⽣僻字,在查询⽤Like模糊匹配的时候,发现有的查询不准确,测试数据如下:
内蒙古旅游--测试数据
if not object_id(N'Tempdb..#T') is null
欲穷千里目更上一层楼是哪个地方drop table #T
Go
Create table #T([col] nvarchar(21))
Insert #T
select N'䱗'UNION
SELECT N'啊'
Go
--测试数据结束
如果这时候⽤Like查询,就会存在查询不准确的情况:
Select * from #T WHERE col LIKE N'%䱗%'
降温短信查询结果:
两个数据都查询出来了,这时候我们使⽤COLLATE关键字,加上Chinese_PRC_BIN可以解决该问题:
Select * from #T WHERE col LIKE N'%䱗%' COLLATE Chinese_PRC_BIN
结果:
这样就解决了这个⽣僻字查询的问题。
那么接下来我们说说问题原因和加的这个COLLATE Chinese_PRC_BIN 是什么意思。
软件开发测试流程⽣僻字由于在数据库中没有对应的编码,这样就会造成like的时候定位不到数据,所以解决这个问题也是从编码处⼊⼿,在排序的时候来做编码转换。
SQLSERVER的排序规则有很多,Chinese_PRC_BIN是⼀种排序规则,该规则分为两部分,其中Chinese_PRC_是指针对⼤陆简体字UNICODE的排序规则,BIN指的是⼆进制排序选项,这些关联选项有很多 ,例如:
选项说明
区分⼤⼩写 (_CS)区分⼤写字母和⼩写字母。 如果选择此项,排序时⼩写字母将在其对应的⼤写字母之前。 如果未选择此选项,排序规则将不区分⼤⼩写。 即 SQL Server 在排序时将⼤写字母和⼩写字母视为相同。 通过指定 _CI,可以显式选择不区分⼤⼩写。
区分重⾳(_AS)区分重⾳字符和⾮重⾳字符。 例如,“a”和“ấ”视为不同字符。 如果未选择此选项,则排序规则将不区分重⾳。 即 SQL Server 在排序时将字母的重⾳形式和⾮重⾳形式视为相同。 通过指定 _AI,可以显式选择不区分重⾳。
区分假名(_KS)区分⽇语中的两种假名字符类型:平假名和⽚假名。 如果未选择此选项,则排序规则将不区分假名。 即 SQL Server 在排序时将平假名字符和⽚假名字符视为相同。 省略此选项是指定不区分假名的唯⼀⽅法。
(_KS)⽚假名字符视为相同。 省略此选项是指定不区分假名的唯⼀⽅法。
区分全半⾓ (_WS)区分全⾓字符和半⾓字符。 如果未选择此选项,SQL Server 会在排序时将同⼀字符的全⾓和半⾓形式视为相同。 省略此选项是指定不区分全半⾓的唯⼀⽅法
文件隐藏选项说明
以上就是查询⽣僻字和排序关键字COLLATE的介绍,欢迎指正交流。
写在最后(今天是个特殊的⽇⼦):
今天是1024程序员节⽇,1024不知道从什么时候开始成了我们的节⽇,成了这些穿着格⼦衬衫、头发稀疏、但正在做着⼀些伟⼤事情的⼈狂欢的节⽇,所以在博客⾥,也要祝福所有正在改变世界的程序员,节⽇快乐,远离脱发-拒绝Bug,Happy 1024
>照片处理软件哪个好
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论