【问题标题】:Why ENUM does not store multiple values in MySQL?为什么 ENUM 不在 MySQL 中存储多个值?
【发布时间】:2016-07-11 10:56:02
【问题描述】:

我想使用 MySQL 在表中使用 ENUM 功能。

我创建了一个表 tbl_test,其中 id 作为主键,enum_col 字段作为 ENUM 数据类型。

CREATE TABLE tbl_test(
id INT NOT NULL AUTO_INCREMENT,
enum_col ENUM('a','b','c') NOT NULL,
PRIMARY KEY ( id )
);

当我尝试存储 单个枚举值时,它被插入,但是当我尝试存储 多个枚举值时,它会抛出 SQL 错误 .

错误:

 Data truncated for column 'enum_col' at row 1

单个 ENUM 值(正确):

INSERT INTO tbl_test(id, enum_col) values(1, 'a');

多个 ENUM 值(失败):

INSERT INTO tbl_test(id, enum_col) values(2, 'a,b');

有没有办法以 ENUM 数据类型存储多个值

【问题讨论】:

  • ENUM 是值类型,而不是集合或数组类型。与其存储值数组,不如规范化您的数据,以便可以使用 MySQL 中的所有正常查询和完整性功能。

标签: mysql database enums insert


【解决方案1】:

那是因为你只能在其中存储一个值,实际上你绝对应该在任何类型的列中只存储一个值。

使用单独的表格。然后,您可以使用多条记录存储任意数量的值。示例:

tbl_test
--------
id   |  name
1    |  test_X
2    |  test_Y
3    |  test_Z


tbl_test_enums
--------------
test_id  | enum_value
1        | a
1        | b
2        | a
3        | c

【讨论】:

【解决方案2】:

如果你想存储多个值,你应该使用SET 数据类型而不是ENUM

http://dev.mysql.com/doc/refman/5.7/en/set.html

【讨论】:

  • 看起来不错的解决方案。
  • 我将枚举更改为设置 - 我在创建和编辑页面时遇到问题!创建未保存和编辑不显示数据库中的数据!
  • @Saltern 听起来有点混乱)我试图想象您面临的一种问题,但您的评论中显然没有足够的细节......
猜你喜欢
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2023-03-18
  • 2021-04-11
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
相关资源
最近更新 更多