童鞋們好,今天我們來總結概括一下列舉型別。
單選字串資料型別,適合儲存表單介面中的「單選值」。
設定enum的時候,需要給定「固定的幾個選項」;儲存的時候就只儲存其中的乙個 值。設定enum的格式:enum(「選項1」,「選項2」,「選項3」,…);
一般會根據列表值得資料壓縮到1-2位元組,mysql的內部會將每個值在列表中的位置儲存為整數,並且在表的.frm檔案中儲存 「數字-字串」 對映關係的「查詢表」。如下
query ok, 0 rows affected (0.07 sec)
query ok, 3 rows affected (0.03 sec)
mysql> select * from enum_test;
+-------+
| e |
+-------+
| fish |
| dog |
+-------+
3 rows in set (0.02 sec)
mysql> select e+0 from enum_test;
+-----+
| e+0 |
+-----+
| 1 |
| 3 |
| 2 |
+-----+
3 rows in set (0.01 sec)
mysql> select e from enum_test where e= 'fish';
+------+
| e |
+------+
| fish |
+------+
1 rows in set (0.04 sec)
mysql> select e from enum_test where e= 1;
+------+
| e |
+------+
| fish |
+------+
1 rows in set (0.04 sec)
這樣如果按上面插入數字(1,2,3),會引起混亂。
資料遷移的時候,他幾乎不可能被其他資料庫所支援,如上面會引起混亂。enum雖然可以儲存字串,但對於內部來說,還是以順序進行索引。如上。如果你看明白了上面的sql為什麼等義,那麼你也就可以了解為什麼不主張用enum欄位了。
enum的區間也是可以變動的,如果你在enum的列舉字段範圍中加乙個值,並且不是加在最後,那麼也就相當於,你把原來的範圍都改變了索引值,試想這又是多麼乙個恐怖的事情
系統中真的已經使用了mysql的enum欄位型別,請在查詢的時候直接查詢值(並加上單引號),這樣就不會使用enum自身隱藏的索引值來獲取結果了
如果乙個設計不合理的enum欄位,給程式設計師帶來的就完全是夢魘,如下
mysql> create table enum_test4(e enum('0','1','2','3'));
query ok, 0 rows affected (0.08 sec)
我插入的數值是1.
mysql> insert into enum_test4(e) values(1);
query ok, 1 rows affected (0.04 sec)
返回的索引是1 ,因為索引是從請開始
mysql> select e+0 from enum_test4;
+------+
| e+0 |
+------+
| 1 |
+------+
1 rows in set (0.02 sec)
插入的卻是0.噩夢
mysql> select e from enum_test4;
+------+
| e |
+------+
| 0 |
+------+
1 rows in set (0.03 sec)
總結:
如果是純數值型,還是建議採用tinyint欄位吧,畢竟它也只佔乙個位元組,即使出現贓資料,也可以被接受,不象enum,如果純數字型範圍,更改了索引,你就不知道你查詢的值是否正確了
如果欄位是字串,並且長度固定,可以嘗試用char。
列舉型別(enum)
enum 是計算機程式語言中的一種資料型別 列舉型別。應用場景 有些變數的取值被要求在乙個確定的範圍內,例如一周有 7天,一年 12個月,或者使用者自定義的今天安排要學習的百家姓有 4個等等。定義 在列舉型別的定義中列舉出所有的可能取值,該變數的取值只能是所列舉的範圍。格式 enum 列舉名 enu...
enum列舉型別。
列舉 定義常量符號,就是巨集定義常數的集合體 比如 四季,星期,意義相關的常數 狀態機 1 根據當前狀態,這個週期結束,就成了下乙個狀態。2 根據你的當前狀態,還和你的輸入有關。比如 fpga,gui 通過列舉,可以將一些常量賦值給某些固定的字串常量。可以通過改變列舉型別的狀態來達到自己的一些目的。...
enum列舉型別
public enum mm aa,bb,cc,dd enum列舉定義好之後,經過編譯後,會變成乙個類,類裡面包含了所有的列舉常量,對於每個列舉常量,主要包含了2個內容 name 和 ordinal,name就是名字,比如上面的 aa,bb 這些就是名字,ordinal 是 int 型別,儲存的是位...