Подтвердить что ты не робот

Перечисление MySQL и набор

Для типа данных MySQL "enum" и "set" каковы различия и преимущества и недостатки использования одного и другого?

Пример типа данных:

  • enum ('A', 'B', 'C')
  • set ('A', 'B', 'C')

Единственное отличие, о котором я знаю, это то, что ENUM только позволяет выбрать одно значение в сравнении с SET, чтобы выбрать несколько значений.

4b9b3361

Ответ 1

В качестве документации по MySQL говорится:

Определение столбца ENUM или SET действует как ограничение на значения вступил в колонку. Произошла ошибка для значений, которые не удовлетворяют следующим условиям:

Значение ENUM должно быть одним из значений, указанных в определении столбца, или внутренний цифровой эквивалент. Значение не может быть ошибкой значение (то есть 0 или пустая строка). Для столбца, определенного как ENUM ('a', 'b', 'c'), значения, такие как '', 'd' или 'ax', являются незаконными и являются отвергнуто.

Значение SET должно быть пустой строкой или значением, состоящим только из значения, указанные в определении столбца, разделенные запятыми. Для столбец, определенный как SET ('a', 'b', 'c'), значения, такие как 'd' или 'a, b, c, d' являются незаконными и отклоняются.

Ответ 2

аналогия:
ENUM = поля радио (только принятые значения перечислены, может выбрать только один)
SET = (только принятые значения перечислены, могут выбрать несколько)

Ответ 3

Enum и Set полностью зависят от требований, например, если у вас есть список переключателей, где только один может быть выбран за один раз, используйте Enum. И если у вас есть список флажков, где за один раз можно выбрать один элемент, используйте set.

Ответ 4

CREATE TABLE setTest(
  attrib SET('bold','italic','underline')
);

INSERT INTO setTest (attrib) VALUES ('bold');
INSERT INTO setTest (attrib) VALUES ('bold,italic');
INSERT INTO setTest (attrib) VALUES ('bold,italic,underline');

Вы можете скопировать код выше и вставить его в mysql, и вы обнаружите, что SET на самом деле является коллекцией. Вы можете сохранить каждый объединенный атрибут, который вы объявляете.

CREATE TABLE enumTest(
 color ENUM('red','green','blue')
);

INSERT INTO enumTest (color) VALUES ('red');
INSERT INTO enumTest (color) VALUES ('gray');
INSERT INTO enumTest (color) VALUES ('red,green');

Вы также можете скопировать код выше. И вы обнаружите, что каждый ENUM фактически может храниться только один раз. И вы обнаружите, что результаты последних двух строк будут пустыми.