SQL SERVER 生僻字查询问题和关键字COLLATE

    先说问题,生僻字查询的问题,有的时候我们的数据里包含一些生僻字,在查询用Like模糊匹配的时候,发现有的查询不准确,测试数据如下:

 1 --测试数据
 2 if not object_id(N'Tempdb..#T') is null
 3     drop table #T
 4 Go
 5 Create table #T([col] nvarchar(21))
 6 Insert #T
 7 select N''UNION
 8 SELECT N''
 9 Go
10 --测试数据结束

如果这时候用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的时候定位不到数据,所以解决这个问题也是从编码处入手,在排序的时候来做编码转换。

COLLATE简单来说就是用来定义排序规则的,具体详细介绍可以看官方文档  https://docs.microsoft.com/zh-cn/sql/t-sql/statements/collations?view=sql-server-ver15

SQLSERVER的排序规则有很多,Chinese_PRC_BIN是一种排序规则,该规则分为两部分,其中Chinese_PRC_是指针对大陆简体字UNICODE的排序规则,BIN指的是二进制排序选项,这些关联选项有很多 ,例如:

 

 

上边列举了几个例子,如果想了解更多,可以到微软官网了解 https://docs.microsoft.com/zh-cn/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15

posted @ 2023-02-27 14:44  每天进步多一点  阅读(512)  评论(0编辑  收藏  举报