我想像这样存储字符串
"1,5,6,7,9,45,20,45,78,81..."
- 数字不能为负数或小数,并且可以在 0-+-200 之间变化
- 数字之间用','分隔
- 列表最多可以包含 0-150 个项目。
我应该为保存这些字符串的列使用什么数据类型?
最佳答案
您要存储的内容称为非规范化数据。 MySQL 有一些专门用于处理此问题的功能,但最好的方法是每行存储一个值,例如:
id | value
---------------
1 | 1
1 | 5
1 | 6
1 | 7
..等等。因为逗号分隔列表:
- 很难在其中寻找特定的值
可以使用 MySQL's GROUP_CONCAT function 生成:
SELECT t.id, GROUP_CONCAT(t.value) FROM TABLE GROUP BY t.id
这是我推荐的表设置的 CREATE TABLE 语句:
DROP TABLE IF EXISTS `example`.`list_values`;
CREATE TABLE `example`.`list_values` (
`id` int(10) unsigned NOT NULL default '0',
`val` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`,`val`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
作为两列的主键确保您不能为一个集合设置重复项 - 如果您要存储的数据不是这样,请将其删除。
列表最多可以包含 0-150 个项目。
您需要使用 a trigger执行该业务规则。
关于mysql - 存储分隔列表的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3364578/