MySQL數據庫的ENUM類型

11.4.4. ENUM類型

ENUM是一個字符串對象,其值來自表建立時在列規定中顯式枚舉的一列值。mysql

在某些狀況下,ENUM值也能夠爲空字符串('')或NULL:sql

·   若是你將一個非法值插入ENUM(也就是說,容許的值列以外的字符串),將插入空字符串以做爲特殊錯誤值。該字符串與「普通」空字符串不一樣,該字符串有數值值0。後面有詳細討論。spa

·   若是將ENUM列聲明爲容許NULL,NULL值則爲該列的一個有效值,而且 默認值爲NULL。code

每一個枚舉值有一個索引:對象

·    來自列規定的容許的值列中的值從1開始編號。排序

·    空字符串錯誤值的索引值是0。這說明你可使用下面的SELECT語句來找出分配了非法ENUM值的行:索引

·   mysql> SELECT * FROM tbl_name WHERE enum_col=0;

·         NULL值的索引是NULL。three

例如,定義爲ENUM的列('one','two','three')能夠有下面所示任何值。還顯示了每一個值的索引:字符串

table

索引

NULL

NULL

''

0

'one'

1

'two'

2

'three'

3

枚舉最多能夠有65,535個元素。

當建立表時,ENUM成員值的尾部空格將自動被刪除。

當檢索時,保存在ENUM列的值使用列定義中所使用的大小寫來顯示。請注意能夠爲ENUM列分配字符集和校對規則。對於二進制或大小寫敏感的校對規則,當爲列分配值時應考慮大小寫。

若是在數值上下文中檢索一個ENUM值,將返回列值的索引。

例如,你能夠這樣從ENUM列搜索數值值:

mysql> SELECT enum_col+0 FROM tbl_name;

若是將一個數字保存到ENUM列,數字被視爲索引,而且保存的值是該索引對應的枚舉成員。(可是,這不適合LOAD DATA,它將全部輸入視爲字符串)。不建議使用相似數字的枚舉值來定義一個ENUM列,由於這很容易引發混淆。例如,下面的列含有字符串值'0'、'1'和'2'的枚舉成員,但數值索引值爲一、2和3:

numbers ENUM('0','1','2')

根據枚舉成員在列定義中列出的順序對ENUM值進行排序。(換句話說,ENUM值根據索引編號進行排序)。

例如,對於ENUM('a','b'),'a'排在'b'前面,但對於ENUM('b','a'),'b'排在'a'前面。空字符串排在非空字符串前面,而且NULL值排在全部其它枚舉值前面。要想防止意想不到的結果,按字母順序規定ENUM列。還可使用GROUP BY  CAST(col AS CHAR) 或 GROUP BY   CONCAT(col)來確保按照詞彙對列進行排序而不是用索引數字。

若是你想要肯定一個ENUM列的全部可能的值,使用SHOW COLUMNS FROM tbl_name LIKE enum_col,並解析輸出中第2列的ENUM定義。

相關文章
相關標籤/搜索