SQL查询如何正确匹配包含西里尔字符₽的文本内容
SQL查询西里尔字符₽无返回的解决方法
核心原因
查询无返回基本是三类问题:客户端编码转换导致传入的₽字符失真、raw_text字段字符集不支持该Unicode字符、排序规则匹配逻辑不兼容直接写字符的查询方式。
具体解决方案
- 第一步:确认字段字符集配置
SQL Server需确保raw_text字段为NVARCHAR/NCHAR类型;MySQL/MariaDB需确保字段字符集为utf8mb4;PostgreSQL默认UTF8编码无需额外调整。 - 第二步:使用Unicode编码指代字符查询(彻底规避客户端编码转换问题)
₽的Unicode编码为U+20BD,不同数据库的查询写法如下:SQL Server
SELECT raw_text FROM [table] WHERE raw_text LIKE N'%' + NCHAR(0x20BD) + N'%'MySQL/MariaDB
SELECT raw_text FROM `table` WHERE raw_text LIKE CONCAT('%', CHAR(0x20BD USING utf8mb4), '%')PostgreSQL
SELECT raw_text FROM "table" WHERE raw_text LIKE '%' || U&'\20BD' || '%' - 第三步:校验存储的字符编码
如果上述查询仍无返回,可打印字段内容的十六进制编码,确认存储的目标字符确实是U+20BD(UTF8编码对应十六进制序列为E282BD),避免混淆外形相似的其他字符。
以MySQL为例,可执行以下语句查看:SELECT HEX(raw_text) FROM `table` LIMIT 10;
内容的提问来源于stack exchange,提问作者LCMa
相关产品推荐
相关产品推荐

