mysql enum 算法_MySQL中的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类型来解决,后面有时间再给大家介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值