set和enum类型的用法和区别
生活随笔
收集整理的這篇文章主要介紹了
set和enum类型的用法和区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
mysql中的set和enum類型的用法和區別
mysql中的enum和set其實都是string類型的而且只能在指定的集合里取值,? 不同的是set可以取多個值,enum只能取一個值。 ?| 1 2 3 4 5 6 7 8 9 10 11 12 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") 的一個列,可以有下面所顯示的任一值。每個值的索引值也如下所示: 值 索引值 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轉載于:https://www.cnblogs.com/xzj8023tp/p/6251629.html
總結
以上是生活随笔為你收集整理的set和enum类型的用法和区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果6现在什么价位(苹果6现在什么价位苹
- 下一篇: 电脑的网卡驱动在哪(电脑的网卡驱动在哪找