MySQL SET数据类型

2ic8powd  于 2023-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(153)

我试着在数据库表中创建一个SET数据类型的列,以这种格式存储数据:10,2,44,如下所示:SET('A' , 'B' , 'C')
当我尝试插入数据时,我得到这样的响应:
错误代码:1265第1行的列“setcol”的数据被截断
这是我的问题:

  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是否接受重复?

mv1qrgav

mv1qrgav1#

要设置所需的值,您需要存储3(不带引号)而不是'A,B'。这是因为SET字段中的值以按位方式以数字方式存储。因此,集合定义中的每个值对应于二进制数中的开/关位。
因此,您的声明将是:

  1. INSERT INTO `voting`.`questionnaires` (`name`, `cat_id`, `init_date`, `end_date`, `setcol`) VALUES ('sad', '2', '2008-02-02', '2008-02-02', 3);

例如,从MySQL Documentation
对于指定为SET('a','b','c','d ')的列,成员具有以下十进制和二进制值。

因此,由于A的值为1B的值为2,将它们相加得到3。或者要设置CD,您可以存储12等。
出于这个原因,将数字作为SET字段的成员是不明智的(正如您所暗示的那样),因为存储'5'与存储5具有完全不同的含义。

相关问题