跳至主要內容

枚举和集合类型

AkashiNeko原创MySQL数据类型

ENUM枚举

枚举类型 ENUM 可以看作一个下标从 11 开始的数组,尝试以下示例。

CREATE TABLE enum_t ( info varchar(128), val enum('AA','BB','CC') );
INSERT INTO enum_t VALUES ('AA','AA'),('BB','BB'),('CC','CC');
INSERT INTO enum_t VALUES ('1',1),('2',2),('3',3);

可以发现,1 等价于第 11 个元素 AA2 等价于第 22 个元素 BB,依此类推。

SELECT * From enum_t;
+------+------+
| info | val  |
+------+------+
| AA   | AA   |
| BB   | BB   |
| CC   | CC   |
| 1    | AA   |
| 2    | BB   |
| 3    | CC   |
+------+------+

SET集合

集合类型 SET 可以看作一个位图结构,用二进制位选择元素,比如十进制数 55(二进制 101)可以选中集合中的第 11 和第 33 个元素。尝试以下示例。

CREATE TABLE set_t ( info varchar(128), val set('AA','BB','CC','DD') );
INSERT INTO set_t VALUES ('AA','AA'),('CC','CC');
INSERT INTO set_t VALUES ('AA,BB,CC','AA,BB,CC');
INSERT INTO set_t VALUES ('0',0),('1',1),('2',2),('4',4);
INSERT INTO set_t VALUES ('3',3),('5',5);

查看数据。

SELECT * FROM set_t;
+----------+----------+
| info     | val      |
+----------+----------+
| AA       | AA       |
| CC       | CC       |
| AA,BB,CC | AA,BB,CC |
| 0        |          |
| 1        | AA       |
| 2        | BB       |
| 4        | CC       |
| 3        | AA,BB    |
| 5        | AA,CC    |
+----------+----------+