mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,
不同的是set可以取多個值,enum只能取乙個值。12
3456
78910
1112
13[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") 的乙個列,可以有下面所顯示的任一值。每個值的索引值也如下所示:
測試時發現''時,用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中的set和enum型別的用法和區別
mysql中的set和enum型別的用法和區別 mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,不同的是set可以取多個值,enum只能取乙個值。php create table 20121101 t id int 11 not null auto increme...
MySQL使用ENUM和SET型別
使用enum和set型別 概述定義資料庫列時,可以使用enum enumeration,列舉 和set 集合 型別。通過它們,可以變通的實現check約束 它們兩者的區別是 使用enum,只能選乙個值 使用set,可以選多個值 enum和set中的值都必須是字串型別 enum列舉 列舉只能是字串列,...
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...