mysql之set与enum的介绍

set,enum的数据类型都是字符串类型的对象,其中set最多可以包含64个元素,并且可以任意取到集合中的元素。而enum则是只能取到集合中的木一个元素,最多包含65536个元素,也就是说set是多项选择,enum是单项选择了。
这里我们来比较下他们之间相同点和不同点:


代码如下:

mysql> create table db_set(
    -> set1 set('x','y','z') not null,
    -> enum1 enum('one','two','three') not null);
Query OK, 0 rows affected (0.06 sec)
mysql> desc db_set;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type                      | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| set1  | set('x','y','z')          | NO   |     | NULL    |       |
| enum1 | enum('one','two','three') | NO   |     | NULL    |       |
+-------+---------------------------+------+-----+---------+-------+
mysql> insert into db_set values(1,3),(1,4),(4,1);
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 1
mysql> select * from db_set ;
+------+-------+
| set1 | enum1 |
+------+-------+
| x    | three |
| x    |       |
| z    | one   |
+------+-------+
3 rows in set (0.01 sec)

这里我们看到了它们的输出结果,我当时也是很不解后来才知道:
set类型中对于超出它能表示的范围的,就用二进制来加去:
Set元素
 十进制
 二进制

‘x'
 1
 0001

‘y'
 2
 0010

‘z'
 4
 0100

enum类型超出自己能表示的范围,就附空值了:
enum元素
 索引

null
 null

‘'
 0

‘one'
 1

‘two'
 2

‘three'
 3

现在大家明白了吧。

(0)

相关推荐

  • 要慎用mysql的enum字段的原因

    PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: 膘哥观点:     enum有优点.但个人觉得...缺点更多,客观的讲:优点主要是在建数据 库的时候就可以把一些值给规范好.缺点是..enum不适合PHP.主要是PHP是弱类型,如:你insert into ..... set a= 1,你没法知道你是想 a= '1' 还是 a= 1(a='1'是插入值1,a=1是插入enum的第一个值,尤其php弱类型的,如果int的,很少有人在sql里加

  • mysql之set与enum的介绍

    set,enum的数据类型都是字符串类型的对象,其中set最多可以包含64个元素,并且可以任意取到集合中的元素.而enum则是只能取到集合中的木一个元素,最多包含65536个元素,也就是说set是多项选择,enum是单项选择了.这里我们来比较下他们之间相同点和不同点: 复制代码 代码如下: mysql> create table db_set(    -> set1 set('x','y','z') not null,    -> enum1 enum('one','two','thre

  • 浅析mysql.data.dll驱动各版本介绍

    此处为mysql驱动mysql.data.dll 注意: 此处X86版本较多,X64版本较少 X64: X86: Vs添加引用过程: 总结 以上所述是小编给大家介绍的mysql.data.dll驱动各版本介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • Mysql中Binlog3种格式的介绍与分析

    一.Mysql Binlog格式介绍      Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在binlog中. 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能.(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,

  • MySQL InnoDB ReplicaSet(副本集)简单介绍

    01 InnoDB ReplicaSet(副本集)介绍 在MySQL8.0引入了InnoDB ReplicaSet,它提供了我们熟悉的复制特性,如果有mongodb副本集的概念,理解InnoDB ReplicaSet会比较容易. InnoDB ReplicaSet使用了下面的技术: 1.MySQL Shell,一个功能更强大的客户端 2.MySQL Router,一个轻量级别的中间件,可以类比MongoDB中的mongos的角色: 3.MySQL Server,也就是MySQL服务 InnoDB

  • MySQL触发器的使用和优缺点介绍

    目录 前言 1. 触发器概述 2. 触发器的创建 2.1 创建触发器语法 2.2 代码举例 3. 查看.删除触发器 3.1 查看触发器 3.2 删除触发器 4. 触发器的优缺点 4.1 优点 4.2 缺点 4.3 注意点 前言 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息和库存信息分别存放在2个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时在库存表中添加一条库存记录. 这样一来,我们就必须把这两个关联的操作步骤写到程序里面,

  • MySQL主从复制之GTID模式详细介绍 

    目录 一.GTID概述 二.GTID相较与传统复制的优势 三.GTID自身存在哪些限制 四.GTID工作原理简单介绍 五.如何开启GTID复制 六.查看GTID相关参数 七.GTID与传统模式建立复制时候语句的不同点 八.GTID同步状态简单解析 一.GTID概述 MySQL5.6 在原有主从复制的基础上增加了一个新的复制方式,即基于GTID的复制方式,它由UUID和事务ID两个部分组成,具有如下特点. GTID事务是全局唯一性的,并且一个事务对应一个GTID值. 一个GTID值在同一个MySQ

  • MySQL Test Run 测试框架详细介绍 

    目录 一.介绍 二.安装 三.测试示例 四.创建测试用例 五.mtr其他常用参数介绍 –force –record –big-test –suite=[dirname] 六.测试用例编写的规范 一.介绍 MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-test目录下. 主要测试步骤,是通过执行一个case(*.test)中的语句(包括sql语句和其他管理语句),将case的输出记录保存在结果文件(*.result)中,或者是将语句执

  • MySQL限制查询和数据排序介绍

    目录 一.限制查询 1.指定从第几行起,返回多少行 2.取最大值 3.取最小值 4.分页 二.数据排序 1.年龄大于10的根据id进行降序排序 2.年龄大于10的按照id进行升序排序 一.限制查询 我们通过limit可以限制返回结果的行数 select * from 表名 limit count; select * from users limit 3; 1.指定从第几行起,返回多少行 select * from 表名 limit start,count; select * from users

  • MySQL分区建索引以及分区介绍总结

    目录 MySQL 分区建索引介绍 MySQL 分区介绍介绍 总结 MySQL 分区建索引介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,从“information_schema.INNODB_SYS_TABLES”系统表可以看到每个分区都存在独立的TABLE_ID,由于Innodb数据和索引都是保存在".ibd"文件当中(从INNODB_SYS_INDEXES系统表中也可以得到每个索引都是对应各自的分区(primary key和uniqu

  • Mysql系统变量与状态变量详细介绍

    目录 系统变量 什么是Mysql系统变量 设置系统变量 my.cnf设置配置 启动项配置 Set的形式修改系统变量 SESSION作用范围语法 GLOBAL作用范围语法 查看系统变量值 系统变量注意点 并不是所有的系统变量都有session范围和global范围 并不是所有系统变量可以修改 状态变量 系统变量 什么是Mysql系统变量 能够在程序运行过程中影响Mysql程序行为的变量称之为系统变量. 在Mysql中存在多个系统变量,可以使用show variables查看,如果直接执行得到的结果

随机推荐