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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
2022-02-27 H5调用手机摄像头和相册
2022-02-27 jquery监听页面滚动条滚动事件
2021-02-27 C# 打印PDF文档的10种方法
2019-02-27 Func与Action
2019-02-27 JavaScript编码规范