mysql enum 建表_MySQL 枚举类型如何定义比较好 tinyint?enum?varchar?

本文探讨了MySQL中enum类型的选择,对比了tinyint和varchar的优缺点。enum虽节省空间且可读,但存在插入非枚举值时的严格模式问题,可能导致插入特殊空字符串。此外,enum排序按定义顺序而非字母顺序,且更改枚举成员需重建表,不支持SQL标准,不适合数字枚举和动态增长的枚举值。建议在值固定不变且数量较少的情况下谨慎使用enum。
摘要由CSDN通过智能技术生成

目录

前言

当项目中遇到比较多的枚举字段时怎么选择MySQL的类型呢?tinyint,varchar还是enum?据我观察大家还是用tinyint的比较多,少数也会直接用varchar。

说到枚举,这个类型真的是有点坑,写的时候又不想校验(尤其是枚举值比较多的时候),又想直接在表里可以显示出原字符(说到底还是懒)。tinyint可以校验插入的值为自己定义的数值且索引友好但是显示不友好,varvhar可以直接在表中显示字段值但对索引又不友好。

两种都不是最优选择,后来MySQL出现了enum类型,可以直接显示值且内部为数字索引。本来以为这个enum可以解放我们的双手了,但我调研了一下发现还是有一些大坑的,难怪很少有人用。

enum介绍

先来介绍一下enum类型吧。

ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举。(建表的时候写到建表语句里)

虽然表面是字符串值,但其内部是数字索引,其索引值从1开始。

注意:下标并不是从 0 开始,而 0 则具有其它的意义(空)

ENUM数据类型提供以下优点:

节省存储空间,MySQL ENUM使用数字索引(1,2,3,…)来表示字符串值。

可读查询和输出,数字将转换回查询结果中的相应字符

实践

下面我们来建个表试一下这个enum类型。

CREATE TABLE `test_enum` (

`id` INT ( 11 ) NOT NULL AUTO_INCREMENT COMMENT '主键ID',

`color` ENUM('red','yellow','blue') COMMENT '颜色',

PRIMARY KEY ( `id` )

) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '颜色表';

c1b43011f88f

image.gi

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值