MySQL中的ENUM类型

摘要:ENUM类型的介绍和实测。

先看下官方文档的介绍:

An ENUM is a string object with a value chosen from a list of permitted values that are enumerated
explicitly in the column specification at table creation time. It has these advantages:
• Compact data storage in situations where a column has a limited set of possible values. The strings
you specify as input values are automatically encoded as numbers. See Section 11.7, “Data Type
Storage Requirements” for the storage requirements for ENUM types.
• Readable queries and output. The numbers are translated back to the corresponding strings in query
results.

ENUM也叫枚举类型,它是字符串类型的一种,它的值范围需要在创建表时通过枚举方式显示指定。它具有以下优点:
•在列具有有限可能值集的情况下压缩存储。输入的值将自动编码为数字。
•可读查询和输出。这些数字在查询中被转换回相应字符串。

ENUM对1-255个成员的枚举需要1个字节存储;对于255-65535个成员,需要2个字节存储。最多允许有65535个成员。

下面我们就通过例子来测试下。

root@database-one 08:25:  [gftest]> create table testenum(name varchar(10),gender enum('M','F'));
Query OK, 0 rows affected (0.28 sec)

root@database-one 08:27:  [gftest]> insert into testenum values('王军','M');
Query OK, 1 row affected (0.02 sec)

root@database-one 08:27:  [gftest]> insert into testenum values('肖杰','1');
Query OK, 1 row affected (0.01 sec)

root@database-one 08:28:  [gftest]> insert into testenum values('刘丽','f');
Query OK, 1 row affected (0.01 sec)

root@database-one 08:28:  [gftest]> insert into testenum values('张伟',null);
Query OK, 1 row affected (0.01 sec)

root@database-one 08:29:  [gftest]> select * from testenum;
+--------+--------+
| name   | gender |
+--------+--------+
| 王军   | M      |
| 肖杰   | M      |
| 刘丽   | F      |
| 张伟   | NULL   |
+--------+--------+
4 rows in set (0.00 sec)

 

通过测试,可以看出ENUM类型是忽略大小写的,在存储时将它们都转换成了建表时定义的大/小写,还可以看出插入不在枚举范围内的值时,并没有返回警告或报错,而是插入了第一个值,在本例中即为enum(‘M’,‘F’)的“M”。

最后,还要注意,ENUM类型只允许从值集合中选取单个值,而不能一次取多个值。如果有多个值的场景那怎么办呢?可以通过SET类型来解决,后面有时间再给大家介绍。

© 2020, morinson. 版权所有. 欢迎转载,但请保留作者及出处。