用于存储分隔列表的数据类型

Gle*_*enn 1 mysql

我想存储这样的字符串

"1,5,6,7,9,45,20,45,78,81 ......"

  • 数字不能是负数或小数,而是从0 - + - 200变化
  • 数字用','分隔
  • 列表最长可以是0-150个项目.

我应该使用什么数据类型来保存这些字符串的列?

OMG*_*ies 6

您要存储的内容称为非规范化数据.MySQL有一些专门用于处理这个问题的功能,但最好的方法是每行存储一个值,如:

id  |  value
---------------
1   |  1
1   |  5
1   |  6
1   |  7
Run Code Online (Sandbox Code Playgroud)

..等等.因为以逗号分隔的列表:

  1. 很难在其中寻找具体的价值观
  2. 可以使用MySQL的GROUP_CONCAT函数生成:

      SELECT t.id, 
             GROUP_CONCAT(t.value)
        FROM TABLE
    GROUP BY t.id
    
    Run Code Online (Sandbox Code Playgroud)

这是我推荐的表设置的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;
Run Code Online (Sandbox Code Playgroud)

两个列的主键确保您不能为一个集合重复 - 如果对于您要存储的数据不适用,请将其删除.

列表最长可以是0-150个项目.

您需要使用触发器来强制执行该业务规则.