You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么MySQL使用带通配符的LIKE运算符时会忽略假名敏感设置?

问题原因与解决方法

该问题通常由两类配置偏差导致,可按以下顺序排查修复:

1. 查询字面量排序规则未与列对齐

MySQL执行LIKE匹配时,会优先采用运算符两端优先级更高的排序规则作为匹配依据。你写的%カナ查询字面量默认继承当前数据库连接的排序规则,若连接级排序规则不是假名敏感类型,就会导致匹配时忽略平假名、片假名差异。
你可以先执行以下命令验证当前会话中常量字符串的排序规则:

SELECT COLLATION('%カナ');

如果返回结果不是utf8mb4_ja_0900_as_cs_ks,任选一种方式修复即可:

  • 单次查询显式指定排序规则:
SELECT * FROM 你的表名 WHERE kana LIKE '%カナ' COLLATE utf8mb4_ja_0900_as_cs_ks;
  • 调整当前连接的全局排序规则,后续查询自动生效:
SET NAMES utf8mb4 COLLATE utf8mb4_ja_0900_as_cs_ks;

2. 修改列排序规则时未转换历史数据

如果你是先插入数据,之后才修改的列排序规则,且修改时未执行字符集转换,历史数据的编码权重仍然沿用旧规则,也会导致匹配异常。
执行以下命令重新转换列编码,同步更新历史数据即可修复:

ALTER TABLE 你的表名 MODIFY COLUMN kana [你的字段原有类型] CHARACTER SET utf8mb4 COLLATE utf8mb4_ja_0900_as_cs_ks;
-- 示例:字段为VARCHAR(50) NOT NULL时的语句
-- ALTER TABLE user MODIFY COLUMN kana VARCHAR(50) NOT NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_ja_0900_as_cs_ks;

规则有效性验证

你可以通过以下测试确认排序规则本身正常生效:

CREATE TABLE test_kana (
  kana VARCHAR(10) COLLATE utf8mb4_ja_0900_as_cs_ks
);
INSERT INTO test_kana VALUES ('カナ'), ('かな');
-- 执行后仅返回「カナ」一条记录即为正常
SELECT * FROM test_kana WHERE kana LIKE '%カナ' COLLATE utf8mb4_ja_0900_as_cs_ks;

内容的提问来源于stack exchange,提问作者Steffen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:57:00