MySQL字段以逗号分隔方式保存匹配其中某个值的记录

在 MySQL 中,如果你有一个字段是以逗号分隔的方式保存多个值(例如 1,2,3,4,6,7,8,11,12),查询包含特定值(例如 1)的记录并不是一种高效或推荐的做法,因为这会涉及到字符串操作,并且无法利用索引。


然而,如果你确实需要这样做,可以使用 FIND_IN_SET 函数。这个函数专门用于搜索以逗号分隔的字符串列表中的值。


假设你的表名是 my_table,字段名是 my_column,你可以使用以下 SQL 查询来查找包含 1 的记录:

SELECT * FROM my_table
WHERE FIND_IN_SET('1', my_column) > 0;

注意事项

性能问题:使用 FIND_IN_SET 会导致全表扫描,因为无法利用索引。如果数据量很大,查询性能可能会很差。

数据规范化:更好的做法是将这种多值关系存储在一个单独的表中,使用关系型数据库的优势。例如,你可以创建一个关联表来存储这些关系,而不是在一个字段中以逗号分隔存储多个值。