SQL: Как вставить данные в тип данных SET? - PullRequest
0 голосов
/ 30 апреля 2020

Как вставить в таблицу тип данных 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_id и movie_id, но не для rate_code и rate_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;

Что я сделал не так?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Под капотом используются цифры. На самом деле биты в битовой строке. Вы используете строки , которые вы определили SET с помощью.

См. Также ENUM, который также отображает строки в числа. Напротив, для столбца ENUM может быть задан только один из параметров. SET может быть назначена любая комбинация значений.

0 голосов
/ 30 апреля 2020

Вы можете использовать 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     +---------+----------+-----------+------------+
...