天天看點

mysql 枚舉 enum用法_mysql中的枚舉類型ENUM的用法:

mysql中的枚舉類型ENUM的用法:

mysql中的枚舉類型ENUM是一個字元串對象,它的值是自表建立時在列規定中顯式枚舉的一列值。

在某些情況下,ENUM值也可以為空字元串('')或NULL:

如果你将一個非法值插入ENUM(也就是說,允許的值列之外的字元串),将插入空字元串以作為特殊錯誤值。該字元串與“普通”空字元串不同,該字元串有數值值0。後面有詳細讨論。

如果将ENUM列聲明為允許NULL,NULL值則為該列的一個有效值,并且 預設值為NULL。如果ENUM列被聲明為NOT

NULL,其預設值為允許的值列的第1個元素。

每個枚舉值有一個索引:

來自列規定的允許的值列中的值從1開始編号。

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

mysql> SELECT * FROM tbl_name WHERE

enum_col=0;

NULL值的索引是NULL。

例如,定義為ENUM的列('one','two','three')可以有下面所示任何值。還顯示了每個值的索引:

值 索引

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'的枚舉成員,但數值索引值為1、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定義。