MySQL數據庫中,因為工作的需求,我們可能會用到ENUM類型,但是由於此類型不是很常用,我們可能對其也不是很了解。沒關系,本文我們就對ENUM類型做一些詳細的解釋,希望能夠對您有所幫助。
ENUM類型是一個字符串對象,其值通常選自一個允許值列表中,該列表在表創建時的列規格說明中被明確地列舉。
在下列某些情況下,值也可以是空串("") 或NULL。
如果將一個無效值插入一個ENUM(即,一個不在允許值列表中的字符串),空字符串將作為一個特殊的錯誤值被插入。事實上,這個字符串有別於一個"普通的"空字符串,因為這個字符串有個數字索引值為 0。稍後有更詳細描述。
如果一個ENUM被聲明為NULL,NULL也是該列的一個合法值,並且該列的缺省值也將為NULL。如果一個ENUM被聲明為NOT NULL,該列的缺省值將是該列表所允許值的第一個成員。每個枚舉值均有一個索引值。
在列說明中列表值所允許的成員值被從1 開始編號。
空字符串錯誤值的索引值為0。這就意味著,你可以使用下面所示的SELECT語句找出被賦於無效ENUM值的記錄行。mysql> SELECT * FROM tbl_name WHERE enum_col=0;
NULL值的索引值為NULL。例如,指定為ENUM("one", "two", "three")的一個列,可以有下面所顯示的任一值。每個值的索引值也如下所示:值索引值 NULLNULL""0 "one"1 "two"2 "three"3 換個枚舉最大可以有 65535 個成員值。從MySQL 3.23.51 開始,當表被創建時,ENUM值尾部的空格將會自動刪除。當為一個ENUM列賦值時,字母的大小寫是無關緊要的。然而,以後從列中檢索出來的值的大小寫卻是匹配於創建表時所指定的允許值。
如果在一個數字語境中檢索一個ENUM,列值的索引值將被返回。例如,你可以像這樣使用數字值檢索一個ENUM列:mysql> SELECT enum_col+0 FROM tbl_name;
如果將一個數字存儲到一個ENUM中,數字被當作為一個索引值,並且存儲的值是該索引值所對應的枚舉成員。(但是,這在LOAD DATA將不能工作,因為它視所有的輸入均為字符串。) 在一個ENUM字符串中存儲數字是不明智的,因為它可能會打亂思維。
ENUM值依照列規格說明中的列表順序進行排序。(換句話說,ENUM值依照它們的索引號排序。)舉例來說,對於ENUM("a", "b") ,"a"排在"b"後,但是對於ENUM("b", "a"),"b"卻排在"a"之前。空字符串排在非空字符串前,NULL值排在其它所有的枚舉值前。為了防止意想不到的結果,建議依照字母的順序定義ENUM列表。也可以通過使用GROUP BY CONCAT(col)來確定該以字母順序排序而不是以索引值。
如果希望得到一個ENUM列的所有可能值,可以使用SHOW COLUMNS FROM table_name LIKE enum_colum來實現。
關於MySQL數據庫ENUM類型的知識就介紹到這裡了,如果您想了解更多MySQL數據庫的知識,可以看一下這裡的文章:http://database.51cto.com/mysql/,相信一定可以給您帶來收獲的。