使用 MySQL 字符串与数字比较时,遇到的问题

59 阅读1分钟

image.png

如上图所示

table_ids = 7 时可以匹配到 table_ids = 7,9,11

查阅文档发现,字段类型和比较方式不匹配 导致的

问题原因

  1. 字段类型问题table_ids 字段是 字符串类型( VARCHAR
  2. 隐式类型转换:当字符串与数字比较时,MySQL 会将字符串转换为数字
  3. 转换规则:字符串转数字时,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 排查问题时发现。