幾天羣裏面說了ENUM這個類型,順便看看這個類型的數據在數據庫裏面是不是按照int類型存放的。
相關資料可以看看《mysql技術內幕innodb存儲引擎》第一版或者第二版
第二版103頁compact記錄格式。下面是我的測試。
表結構:
mysql> desc enum_t;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| a | enum('A','B','C','D','E') | YES | | NULL | |
| b | char(10) | YES | | NULL | |
+-------+---------------------------+------+-----+---------+-------+
2 rows in set (0.11 sec)
數據:
mysql> select * from enum_t;
+------+------+
| a | b |
+------+------+
| A | B |
| B | C |
| C | D |
| D | E |
| A | F |
| B | G |
+------+------+
6 rows in set (0.00 sec)
二進制:
0000c070 73 75 70 72 65 6d 75 6d 00 00 00 10 00 24 00 00 |supremum.....$..|
0000c080 00 00 81 14 00 00 00 00 63 be 93 00 00 01 40 01 |........c.....@.|
0000c090 10 01 42 20 20 20 20 20 20 20 20 20 00 00 00 18 |..B ....|
0000c0a0 00 24 00 00 00 00 81 15 00 00 00 00 63 bf 94 00 |.$..........c...|
0000c0b0 00 01 c9 01 10 02 43 20 20 20 20 20 20 20 20 20 |......C |
0000c0c0 00 00 00 20 00 24 00 00 00 00 81 16 00 00 00 00 |... .$..........|
0000c0d0 63 cc 9d 00 00 01 80 01 10 03 44 20 20 20 20 20 |c.........D |
0000c0e0 20 20 20 20 00 00 00 28 00 24 00 00 00 00 81 17 | ...(.$......|
0000c0f0 00 00 00 00 63 cd 9e 00 00 01 e2 01 10 04 45 20 |....c.........E |
0000c100 20 20 20 20 20 20 20 20 00 00 00 30 00 24 00 00 | ...0.$..|
0000c110 00 00 81 18 00 00 00 00 63 da a7 00 00 01 cc 01 |........c.......|
0000c120 10 01 46 20 20 20 20 20 20 20 20 20 00 00 00 38 |..F ...8|
0000c130 ff 3e 00 00 00 00 81 19 00 00 00 00 63 db a8 00 |.>..........c...|
0000c140 00 01 cd 01 10 02 47 20 20 20 20 20 20 20 20 20 |......G |
0000c150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
可見這個真的是存儲了1,2,3,4.