Для типов данных MySQL «перечисление» и «набор», каковы различия, преимущества и недостатки использования одного по сравнению с другим?
Пример типа данных:
- перечисление ('A', 'B', 'C')
- set ('A', 'B', 'C')
Единственное различие, о котором я знаю, заключается в том, что ENUM позволяет выбирать только одно значение, а SET позволяет выбирать несколько значений.
Ответы:
Как указано в документации MySQL :
источник
(a, b, c, d)
не будет отклонено. Простоd
будет отклонено, что приведет к получению значения(a, b, c)
.аналогия:
ENUM = радиополя (перечислены только допустимые значения, можно выбрать только одно)
SET = поля флажка (перечислены только допустимые значения, можно выбрать несколько)
источник
Enum и Set полностью зависят от требований, например, если у вас есть список переключателей, в котором можно выбрать только один, используйте Enum. И если у вас есть список флажков, в котором одновременно можно выбрать более одного элемента, используйте set.
источник
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 на самом деле может быть сохранен только один раз каждый раз. И вы обнаружите, что результаты двух последних строк будут пустыми.
источник
На самом деле это довольно просто:
Когда вы определяете ENUM ('Да', 'Нет', 'Может быть'), вы должны ВСТАВИТЬ только одно из этих значений (или их порядковый номер)
Когда вы определяете SET ('R', 'W', 'X'), вы можете ВСТАВИТЬ пустую строку или одно или несколько из этих значений. Если вы вставляете что-то, чего нет в предопределенном наборе, вместо этого вставляется пустая строка. Обратите внимание, что перед вставкой все повторяющиеся значения отбрасываются, поэтому вставляется только один экземпляр каждого разрешенного значения.
Надеюсь, это проясняет ситуацию.
Обратите внимание, что ответ Winbobob неверен и содержит некорректные примеры, так как при вставке нескольких значений значения должны быть строками, разделенными запятыми. Все его вставки фактически вставляют только одно значение (а последние два не входят в определенный набор)
источник