MySQL Enum всегда содержит '' (пустую строку) в возможностях
Я пытаюсь создать простой "да" / "возможно" / "нет" Enum в MySQL с PhpMyAdmin
Я установил NULL в No, и "возможно" в качестве значения по умолчанию
Я ожидаю ошибку при выполнении чего-то вроде "SET EnumCol = ''", потому что '' (пустая строка) не должно быть допустимым значением.
Но запрос выполняется, и значение получает значение '' - это означает, что я вынужден дважды проверять это нежелательное и незаконное значение всякий раз, когда я читаю из базы данных!
Является ли это ошибкой в MySQL или PhpMyAdmin?
Кто-нибудь знает способ отключения этого поведения?
Спасибо.
Ответы
Ответ 1
Пустая строка - это индикатор ошибки недопустимых значений в ENUM
. Из mysql ENUM
введите руководство:
Если вы введете недопустимое значение в ENUM (то есть строку, не содержащуюся в списке допустимых значений), пустая строка будет вставлена вместо этого в качестве специального значения ошибки. Эта строка может отличаться от "нормальной" пустой строки тем фактом, что эта строка имеет числовое значение 0. Об этом позже.
Чтобы отключить это поведение:
Если включен строгий режим SQL, попытки вставить неверные значения ENUM приводят к ошибке.
Чтобы включить строгий режим, см. Режимы сервера SQL.
Ответ 2
ENUM - это боль в прикладе. если вам также не нужно устанавливать значение по числу, я бы держался подальше от них.
вместо этого используйте столбец varchar с внешним ключом в таблице поиска, чтобы ограничить значения. что сделает невозможным вставить плохое значение.