MySQL nie wymusza ograniczeń sprawdzania.
Jest to dobrze udokumentowane odstępstwo od standardu SQL. (Chociaż to nieoczekiwane dla niewtajemniczonych.)
Jeśli potrzebujesz bazy danych MySQL, aby wymusić „ograniczenie sprawdzające”, wymuszenie musi być zakodowane w BEFORE INSERT
i BEFORE UPDATE
wyzwalacz.
Ta uwaga:
jest pochowany w MySQL Reference Manual, pod CREATE TABLE
składnia.
Odniesienie:https://dev.mysql.com/doc /refman/5.5/en/create-table.html
OSTRZEŻENIE DOTYCZĄCE ENUM
ENUM
nie ogranicza możliwości wstawiania „nieprawidłowych” wartości; nieprawidłowa wartość jest tłumaczona na łańcuch o zerowej długości, wyświetlane jest ostrzeżenie, ale nie jest to błąd.
Demonstracja:
CREATE TABLE foo (gen ENUM('M','F'))
INSERT INTO foo (gen) VALUES ('x')
-- Warning Code : 1265
-- Data truncated for column 'gen' at row 1
SELECT gen, CHAR_LENGTH(gen) FROM foo;
-- gen CHAR_LENGTH(gen)
-- --- ----------------
-- 0