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

您所在的位置:网站首页 查生僻字的app推荐 SQL SERVER 生僻字查询问题和关键字COLLATE

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

2024-07-16 05:54| 来源: 网络整理| 查看: 265

       先说问题,生僻字查询的问题,有的时候我们的数据里包含一些生僻字,在查询用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的时候定位不到数据,所以解决这个问题也是从编码处入手,在排序的时候来做编码转换。

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

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

  选项说明区分大小写 (_CS)区分大写字母和小写字母。 如果选择此项,排序时小写字母将在其对应的大写字母之前。 如果未选择此选项,排序规则将不区分大小写。 即 SQL Server 在排序时将大写字母和小写字母视为相同。 通过指定 _CI,可以显式选择不区分大小写。区分重音 (_AS)区分重音字符和非重音字符。 例如,“a”和“ấ”视为不同字符。 如果未选择此选项,则排序规则将不区分重音。 即 SQL Server 在排序时将字母的重音形式和非重音形式视为相同。 通过指定 _AI,可以显式选择不区分重音。区分假名 (_KS)区分日语中的两种假名字符类型:平假名和片假名。 如果未选择此选项,则排序规则将不区分假名。 即 SQL Server 在排序时将平假名字符和片假名字符视为相同。 省略此选项是指定不区分假名的唯一方法。区分全半角 (_WS)区分全角字符和半角字符。 如果未选择此选项,SQL Server 会在排序时将同一字符的全角和半角形式视为相同。 省略此选项是指定不区分全半角的唯一方法

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

       以上就是查询生僻字和排序关键字COLLATE的介绍,欢迎指正交流。

 

       写在最后(今天是个特殊的日子):

       今天是1024程序员节日,1024不知道从什么时候开始成了我们的节日,成了这些穿着格子衬衫、头发稀疏、但正在做着一些伟大事情的人群狂欢的节日,所以在博客里,也要祝福所有正在改变世界的程序员,节日快乐,远离脱发-拒绝Bug,Happy 1024!!!

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3