如上图所示
table_ids = 7 时可以匹配到 table_ids = 7,9,11
查阅文档发现,字段类型和比较方式不匹配 导致的
问题原因
- 字段类型问题:
table_ids字段是 字符串类型(VARCHAR) - 隐式类型转换:当字符串与数字比较时,MySQL 会将字符串转换为数字
- 转换规则:字符串转数字时,MySQL 会从左边开始读取,直到遇到非数字字符
-- 查询SQL
SELECT id, table_ids FROM `data_preset_question` WHERE table_ids = 7
-- MySQL 实际执行的是:
SELECT id, table_ids FROM `data_preset_question` WHERE CAST(table_ids AS SIGNED) = 7
-- '7,9,11' 转换为数字时:
-- 从左边开始读取 '7',遇到逗号停止,得到数字 7
-- 所以 CAST('7,9,11' AS SIGNED) = 7
2025-10-23 排查问题时发现。