Spec-Zone .ru
спецификации, руководства, описания, API
|
ENUM
и
SET
столбцы обеспечивают эффективный способ определить столбцы, которые могут содержать только данный набор
значений. См. Раздел 11.4.4,"
ENUM
Введите", и Раздел 11.4.5,"
SET
Введите". Однако, перед MySQL 5.0.2, ENUM
и SET
столбцы не обеспечивают истинные ограничения на запись недопустимых данных:
ENUM
у столбцов всегда есть значение по умолчанию. Если Вы не определяете
значения по умолчанию, то это NULL
для столбцов, которые могут иметь NULL
, иначе это - первая перечислимая величина в определении столбца.
Если Вы вставляете неправильное значение в ENUM
столбец или если Вы вызываете значение в ENUM
столбец с IGNORE
, это устанавливается в
зарезервированную перечислимую величину 0
, который выводится на экран как
пустая строка в строковом контексте.
Если Вы вставляете неправильное значение в a SET
столбец, неправильное значение игнорируется. Например, если столбец
может содержать значения 'a'
, 'b'
, и 'c'
, попытка присвоиться 'a,x,b,y'
результаты в значении 'a,b'
.
С MySQL 5.0.2 можно сконфигурировать сервер, чтобы использовать строгий режим SQL. См. Раздел
5.1.7, "Режимы SQL Сервера". Со строгим включенным режимом, определение a ENUM
или SET
столбец совершает поступок как ограничение на значения, в которые вводят
столбец. Ошибка происходит для значений, которые не удовлетворяют эти условия:
ENUM
значение должно быть одним из перечисленных в определении столбца,
или внутреннем числовом эквиваленте этого. Значение не может быть ошибочным значением (то есть, 0 или
пустая строка). Для столбца, определенного как ENUM('a','b','c')
,
значения такой как ''
, 'd'
, или 'ax'
недопустимы и отклоняются.
A SET
значение должно быть пустой строкой или значением, состоящим только
из значений, перечисленных в определении столбца, разделенном запятыми. Для столбца, определенного как
SET('a','b','c')
,
значения такой как 'd'
или 'a,b,c,d'
недопустимы и отклоняются.
Ошибки для недопустимых значений могут быть подавлены в строгом режиме, если Вы используете INSERT IGNORE
или UPDATE IGNORE
. В этом случае
предупреждение сгенерировано, а не ошибка. Для ENUM
, значение вставляется как ошибочный элемент (0
). Для SET
,
значение вставляется как дано за исключением того, что удаляются любые недопустимые подстроки. Например, 'a,x,b,y'
результаты в значении 'a,b'
.