0

0

ENUM和SET类型 mysql

php中文网

php中文网

发布时间:2016-06-07 15:52:47

|

2575人浏览过

|

来源于php中文网

原创

ENUM和SET类型 1、ENUM和SET类型的定义 ENUM 和 SET 类型是两种特殊的字符串类型,它们有很多相之处,使用方法也是 分类系,通常都从一个在表创建时明确列举的允许的一张表中选择,其主要的区别是 ENUM列必须是集合中的一个成员,而SET列可以包括其中的任意

ENUM和SET类型  
1、ENUM和SET类型的定义
ENUM 和 SET 类型是两种特殊的字符串类型,它们有很多相似之处,使用方法也是
分类系,通常都从一个在表创建时明确列举的允许值的一张表中选择,其主要的区别是
ENUM列必须是值集合中的一个成员,而SET列可以包括其中的任意成员。

例如,创建如下两个串列:
color ENUM(“red”,”black”,”green”,”yellow”)
property SET(“car”,”house”,”stock”) NOT NULL
那么color和property可能的值分别为:
color:NULL、”red”、”black”、”green”和”yellow”
而property可能的值就复杂的多:
“”
“car”
“house”
“car,house”
“stock”
“car,stock”
“house,stock”
“car,house,stock”
由于空串可以表示不具备值的集合的任何一个值,所以这也是一个合法的SET值。
ENUM类型可以有65536个成员,而SET类型最多可以有64个成员。
2、ENUM和SET类型是如何存储的
ENUM 和 SET 类型在数据库内部并不是用字符的方式存储的,而是使用一系列的数
字,因此更为高效。
ENUM和SET类型的合法值列表的原则为:
 此列表决定了列的可能合法值。
 可按任意的大小写字符插入 ENUM 或 SET 值,但是列定义中指定的串的大小
写字符决定了以后检索它们时的大小写。
 在 ENUM 定义中的值顺序就是排序顺序。SET 定义中的值顺序也决定了排序
顺序,但是这个关系更为复杂,因为列值可能包括多个集合成员。
 SET 定义中的值顺序决定了在显示由多个集合成员组成的 SET 列值时,子串出
现的顺序。
对于 ENUM 列类型,成员是从 1 开始顺序编号的。(0 被 MySQL 用作错误成
员,如果以串的形式表示就是空串。)枚举值的数目决定了 ENUM 列的存储大小。一个
字节可表示 256 个值,两个字节可表示 65 536 个值。因此,枚举成员的最大数目为 65
536(包括错误成员),并且存储大小依赖于成员数目是否多于 256 个。在 ENUM 定义
中,可以最多指定 65 535(而不是 65 536)个成员,因为 MySQL 保留了一个错误成
员,它是每个枚举的隐含成员。在将一个非法值赋给 ENUM 列时,MySQL 自动将其换
成错误成员。
对于 SET 类型,SET 列的集合成员不是顺序编号的,而是每个成员对应 SET 值中
的一个二进制位。第一个集合成员对应于 0 位,第二个成员对应于 1 位,如此等等。数
值 SET 值 0 对应于空串。SET 成员以位值保存。每个字节的 8 个集合值可按此方式
存放,因此 SET 列的存储大小是由集合成员的数目决定的,最多 64 个成员。对于大小
为 1 到 8、9 到 16、17 到 24、25 到 32、33 到 64 个成员的集合,其 SET 值分别
占用 1、2、3、4 或 8 个字节。
例如,还是上面的例子,我们从一个表中检索出 ENUM 和 SET 列的值,及其对应的
数值:
对于ENUM类型的color列
SELECT color,color+0 from my_table
其结果为:
+--------+---------+
| color | color+0 |
+--------+---------+
| NULL   |    NULL |
| black |       2 |
| green |       3 |
| yellow |       4 |
| red    |       1 |
| red    |       1 |
| green |       3 |
| green |       3 |
| yellow |       4 |
+--------+---------+
对于SET类型的property列,同样的
SELECT property,property+0 FROM my_table;
其结果为
+-----------------+------------+
| property        | property+0 |
+-----------------+------------+
|                 |          0 |
| house,stock     |          6 |
| car,stock       |          5 |
| stock           |          4 |
| car,house,stock |          7 |
| car,house       |          3 |
| house           |          2 |
| car,stock       |          5 |
| house,stock     |          6 |
+-----------------+------------+
你可以仔细了解它们之间的对应关系。
因此,在给列赋值、检索时,你不仅可以使用值表中的字符串,也可以使用数值来
表示一个值,例如下列语句是等价的:
INSERT my_table SET property=’car,house,stock’
INSERT my_table SET property=7
对于ENUM列也同样如此:
INSERT my_table SET color=’red’;
INSERT my_table SET color=1

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
深入剖析redis教程
深入剖析redis教程

共55课时 | 7.9万人学习

麦子学院深入浅出 redis 视频教程
麦子学院深入浅出 redis 视频教程

共20课时 | 4.4万人学习

传智播客redis基础视频教程
传智播客redis基础视频教程

共13课时 | 5.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号