我尝试在数据库表中创建一个具有 SET
数据类型的列,以以下格式存储数据:10,2,44
,如下所示:SET('A', 'B', 'C')
.
当我尝试插入数据时,我收到以下响应:
Error Code: 1265. Data truncated for column 'setcol' at row 1
这是我的查询:
INSERT INTO `voting`.`questionnaires` (`name`, `cat_id`, `init_date`, `end_date`, `setcol`) VALUES ('sad', '2', '2008-02-02', '2008-02-02', 'A, B');
我应该使用特定格式吗? SET
接受重复吗?
最佳答案
要设置所需的值,您需要存储 3
(不带引号)而不是 'A,B'
。这是因为 SET
字段中的值以按位方式数字存储。因此,集合定义中的每个值都对应于二进制数中的开/关位。
因此你的陈述将是:
INSERT INTO `voting`.`questionnaires` (`name`, `cat_id`, `init_date`, `end_date`, `setcol`) VALUES ('sad', '2', '2008-02-02', '2008-02-02', 3);
例如,来自MySQL Documentation :
For a column specified as SET('a','b','c','d'), the members have the following decimal and binary values.
因此,由于 A
的值为 1
且 B
的值为 2
,因此将它们加在一起你会得到3
。或者要设置 C
和 D
,您可以存储 12
等。
因此,将数字作为 SET
字段的成员(正如您暗示的那样)是不明智的,因为存储 '5'
具有完全不同的方式意义比存储5
。
关于MySQL SET 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28542379/