MySQL 中的枚舉數(shù)據(jù)類型經(jīng)常被用來存儲只有一些特定值的數(shù)據(jù)。由于 MySQL 的枚舉類型比較寬松,有時候可能會出現(xiàn)一些不應(yīng)該出現(xiàn)的值,但是 MySQL 并不會報錯的情況。
CREATE TABLE fruits ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, color ENUM('red', 'yellow', 'green', 'purple') ); INSERT INTO fruits (name, color) VALUES ('banana', 'yellow'); INSERT INTO fruits (name, color) VALUES ('apple', 'red'); INSERT INTO fruits (name, color) VALUES ('grape', 'purple'); INSERT INTO fruits (name, color) VALUES ('watermelon', 'red');
例如,以上代碼創(chuàng)建了一個水果表,并定義了一個顏色枚舉類型,只能取 'red', 'yellow', 'green' 或 'purple' 這四種值。但是,如果我們插入一個不在枚舉類型中的值,比如 'blue':
INSERT INTO fruits (name, color) VALUES ('blueberry', 'blue');
MySQL 并不會報錯,而是將該值轉(zhuǎn)換成字符串 'blue' 存入枚舉類型中。如果我們查詢該記錄,會發(fā)現(xiàn)顏色是 'blue':
SELECT * FROM fruits WHERE name = 'blueberry';
因此,我們需要時刻注意 MySQL 的枚舉類型比較寬松,避免出現(xiàn)不應(yīng)該出現(xiàn)的值。在設(shè)計表結(jié)構(gòu)時,應(yīng)該盡量將數(shù)據(jù)類型定義得更加嚴(yán)格,避免數(shù)據(jù)異常。