mysql中的ENUM型別

2021-05-12 20:10:17 字數 1570 閱讀 9785

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 定義。

mysql中enum型別理解

enum是列舉型別,它雖然只能儲存乙個值,卻能夠處理多達65535個預定義的值。下面是我寫的乙個mysql語句 create table student id int 11 primary key auto increment,name varchar 10 not null,enum boy gi...

mysql中的enum和set型別

mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,不同的是set可以取多個值,enum只能取乙個 create table 20121101 t id int 11 not null auto increment,name varchar 20 not null,c...

mysql中的enum和set型別

mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,不同的是set可以取多個值,enum只能取乙個 create table 20121101 t id int 11 not null auto increment,name varchar 20 not null,c...