我试着在数据库表中创建一个SET
数据类型的列,以这种格式存储数据:10,2,44
,如下所示:SET('A' , 'B' , 'C')
。
当我尝试插入数据时,我得到这样的响应:
错误代码:1265第1行的列“setcol”的数据被截断
这是我的问题:
INSERT INTO `voting`.`questionnaires` (`name`, `cat_id`, `init_date`, `end_date`, `setcol`) VALUES ('sad', '2', '2008-02-02', '2008-02-02', 'A, B');
我应该使用特定格式吗?SET
是否接受重复?
1条答案
按热度按时间mv1qrgav1#
要设置所需的值,您需要存储
3
(不带引号)而不是'A,B'
。这是因为SET
字段中的值以按位方式以数字方式存储。因此,集合定义中的每个值对应于二进制数中的开/关位。因此,您的声明将是:
例如,从MySQL Documentation:
对于指定为SET('a','b','c','d ')的列,成员具有以下十进制和二进制值。
因此,由于
A
的值为1
,B
的值为2
,将它们相加得到3
。或者要设置C
和D
,您可以存储12
等。出于这个原因,将数字作为
SET
字段的成员是不明智的(正如您所暗示的那样),因为存储'5'
与存储5
具有完全不同的含义。