Gigahard
Guest
Загадочный тип данных Enum
До сегоднешнего дня считал, что тип данных enum создан для хранения строго набора вариантов, определяемых при создании enum столбца.
Создавал я что то типа викторины, где таблица ответов содержала сами варианты ответов и столбец enum('Y','N') который определял бы правильность того или иного ответа.
Считал что при забивании вариантов ответов, будут проходить исключительно запросы содержащие корректные значения enum, т.е. или Y, или N. Ну или на худой конец какие либо сообщения от MySQL о несоответствии вводимого значения.
Однако при попытке ввода "левых" значений в поле enum, такой вариант тоже прокатывал и строка успешно записывалась.
В чем тогда смысл такого типа данных, который пропускает "левые" значения и не выдает даже никакого сообщения об ошибке!?
Конечно в поле enum записывается пустое значение (не null), но при этом ВСЯ вводимая строка записывается в таблицу, тем самым создавая мусор.
Можно конечно написать код проверки поля на допустимые значения, или процедуру очистки недопустимых строк, но какой тогда смысл в enum вообще? Ведь можно тогда и char и tinyint использовать!
До сегоднешнего дня считал, что тип данных enum создан для хранения строго набора вариантов, определяемых при создании enum столбца.
Создавал я что то типа викторины, где таблица ответов содержала сами варианты ответов и столбец enum('Y','N') который определял бы правильность того или иного ответа.
Считал что при забивании вариантов ответов, будут проходить исключительно запросы содержащие корректные значения enum, т.е. или Y, или N. Ну или на худой конец какие либо сообщения от MySQL о несоответствии вводимого значения.
Однако при попытке ввода "левых" значений в поле enum, такой вариант тоже прокатывал и строка успешно записывалась.
В чем тогда смысл такого типа данных, который пропускает "левые" значения и не выдает даже никакого сообщения об ошибке!?
Конечно в поле enum записывается пустое значение (не null), но при этом ВСЯ вводимая строка записывается в таблицу, тем самым создавая мусор.
Можно конечно написать код проверки поля на допустимые значения, или процедуру очистки недопустимых строк, но какой тогда смысл в enum вообще? Ведь можно тогда и char и tinyint использовать!