mysql中的set和enum型別的用法和區別

2021-12-30 12:18:08 字數 1957 閱讀 4100

mysql中的set和enum型別的用法和區別

mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值, 

不同的是set可以取多個值,enum只能取乙個值。  

[php]

create table `20121101_t` (

`id` int(11) not null auto_increment,

`name` varchar(20) not null,

`cl` set('x','w','r') not null,

`c2` enum('f','d') not null,

primary key (`id`)

) engine=innodb

insert into 20121101_t

values(null,'a.txt','r,w','d');

insert into 20121101_t

values(null,'b.txt','r,w','f');

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") 的乙個列,可以有下面所顯示的任一值。每個值的索引值也如下所示:

值 索引值

null null

"" 0

"one" 1

"two" 2

"three" 3

測試時發現''時,用0來表示查不到資料。

換個列舉最大可以有 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和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...

mysql中的enum和set型別

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