【问题标题】:SQL: How to insert data into SET datatype?SQL:如何将数据插入 SET 数据类型?
【发布时间】:2020-08-15 07:55:38
【问题描述】:

如何插入表 SET 数据类型?

当我尝试插入 SET 数据(在 MySQL 中)时 - 它成功插入(没有警告或错误),但我得到一个空单元格而不是一个由数据填充的单元格。

我试过这样:

INSERT INTO `individual_rate`(`user_id`, `movie_id`, `rate_code`, `rate_parts`) 
VALUES (3, 13,('1, 0, 0, 0, 0, 0'),('81, 102, 0, 102'))

也试过这样:

INSERT INTO `individual_rate`(`user_id`, `movie_id`, `rate_code`, `rate_parts`) 
VALUES (3, 13,'1, 0, 0, 0, 0, 0','81, 102, 0, 102')

它将数据插入到user_idmovie_id,但没有为rate_coderate_parts 执行此操作

表结构:

CREATE TABLE `individual_rate` (
  `user_id` int(11) NOT NULL,
  `movie_id` int(11) NOT NULL,
  `rate_code` set('n','a','f','d','s','e') COLLATE utf8_unicode_ci NOT NULL COMMENT 'rate code',
  `rate_parts` set('top_f','bottom_f','top_a','bottom_a') COLLATE utf8_unicode_ci NOT NULL COMMENT 'generated parts'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我做错了什么?

【问题讨论】:

  • '1, 0, 0, 0, 0, 0' 插入定义为set('n','a','f','d','s','e') 的列时会发生什么?
  • @forpas 我希望 set 填充此数据(数字)。这不是我应该期待的?
  • 但是您将集合定义为仅包含:'n','a','f','d','s','e'。
  • 哦,现在我明白了。我认为set 是一个数组,并希望我可以填写它的字段。

标签: mysql sql set sqldatatypes


【解决方案1】:

您可以使用show warnings; 来查看发生了什么。

这是结果,

show warnings;
+---------+------+-------------------------------------------------+
| Level   | Code | Message                                         |
+---------+------+-------------------------------------------------+
| Warning | 1265 | Data truncated for column 'rate_code' at row 1  |
| Warning | 1265 | Data truncated for column 'rate_parts' at row 1 |
+---------+------+-------------------------------------------------+

插入语句可以是

 INSERT INTO `individual_rate`(`user_id`, `movie_id`, `rate_code`, `rate_parts`)  VALUES (3, 13, 'n', 'top_f');



  select * from individual_rate;
  1     +---------+----------+-----------+------------+
  2     | user_id | movie_id | rate_code | rate_parts |
  3     +---------+----------+-----------+------------+
  4     |       3 |       13 |           |            |
  5     |       3 |       13 | n         | top_f      |
  6     +---------+----------+-----------+------------+

【讨论】:

  • 感谢您的回答。我不明白为什么会发出这样的警告?我需要向该字段写入一个数组。为此,我用了set,​​结果发现不能用?您知道将数组写入字段需要做什么吗?
  • set 表示它的值只能是其中一个,不能是整个数组。
  • 现在我明白了。我认为set 是一个数组,并希望我可以填写它的字段。
【解决方案2】:

在底层,它使用数字。实际上是位串中的位。 使用你定义SET字符串

另见ENUM,它也将字符串映射为数字。相反,ENUM 列只能设置为选项之一。可以为 SET 分配值的任意组合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2014-04-20
    相关资源
    最近更新 更多