`

MYSQL中 ENUM 类型的详细解释

阅读更多
ENUM 类型
ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举。

在下列某些情况下,值也可以是空串("") 或 NULL:

如果将一个无效值插入一个 ENUM (即,一个不在允许值列表中的字符串),空字符串将作为一个特殊的错误值被插入。事实上,这个字符串有别于一个"普通的"空字符串,因为这个字符串有个数字索引值为 0。稍后有更详细描述。
如果一个 ENUM 被声明为 NULL,NULL 也是该列的一个合法值,并且该列的缺省值也将为 NULL 。如果一个 ENUM 被声明为 NOT NULL,该列的缺省值将是该列表所允许值的第一个成员。
每个枚举值均有一个索引值:

在列说明中列表值所允许的成员值被从 1 开始编号。
空字符串错误值的索引值为 0。这就意味着,你可以使用下面所示的 SELECT 语句找出被赋于无效 ENUM 值的记录行。
mysql> SELECT * FROM tbl_name WHERE enum_col=0;
NULL 值的索引值为 NULL。
例如,指定为 ENUM("one", "two", "three") 的一个列,可以有下面所显示的任一值。每个值的索引值也如下所示:

值  索引值 
NULL NULL
"" 0
"one" 1
"two" 2
"three" 3

换个枚举最大可以有 65535 个成员值。

从 MySQL 3.23.51 开始,当表被创建时,ENUM 值尾部的空格将会自动删除。

当为一个 ENUM 列赋值时,字母的大小写是无关紧要的。然而,以后从列中检索出来的值的大小写却是匹配于创建表时所指定的允许值。

如果在一个数字语境中检索一个ENUM,列值的索引值将被返回。例如,你可以像这样使用数字值检索一个 ENUM 列:

mysql> SELECT enum_col+0 FROM tbl_name;
如果将一个数字存储到一个 ENUM 中,数字被当作为一个索引值,并且存储的值是该索引值所对应的枚举成员。(但是,这在 LOAD DATA 将不能工作,因为它视所有的输入均为字符串。) 在一个 ENUM 字符串中存储数字是不明智的,因为它可能会打乱思维。

ENUM 值依照列规格说明中的列表顺序进行排序。(换句话说,ENUM 值依照它们的索引号排序。)举例来说,对于 ENUM("a", "b") "a" 排在 "b" 后,但是对于 ENUM("b", "a") , "b" 却排在 "a" 之前。空字符串排在非空字符串前,NULL 值排在其它所有的枚举值前。为了防止意想不到的结果,建议依照字母的顺序定义 ENUM 列表。也可以通过使用 GROUP BY CONCAT(col) 来确定该以字母顺序排序而不是以索引值。

如果希望得到一个 ENUM 列的所有可能值,可以使用 SHOW COLUMNS FROM table_name LIKE enum_colum
分享到:
评论
1 楼 nihao7010 2012-06-18  
 

相关推荐

    实例测试MySQL的enum类型

    本篇内容将详细介绍如何使用MySQL的enum类型,并通过实例测试来讲解其用法和潜在的问题。 首先,enum类型的定义是在创建表时指定的,例如: ```sql CREATE TABLE `enum_tests` ( `id` int(10) unsigned NOT NULL ...

    Java中数据类型和MYSQL中数据类型的对比

    3. 字符串类型:MySQL 的字符串类型主要包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET。CHAR 和 VARCHAR 用于存储非二进制文本,其中 VARCHAR 更适合存储可变长度的字符串。BINARY 和 VARBINARY ...

    要慎用mysql的enum字段的原因

    MySQL中的ENUM类型是一种预定义的字符串类型,它允许我们在创建表时限制某个字段只能接受预设的一组值。然而,在实际应用中,特别是在与PHP这样的弱类型语言配合使用时,ENUM字段常常引发一些问题,因此建议谨慎使用...

    mysql之set与enum的介绍

    MySQL中的`SET`和`ENUM`是两种特殊的字符串数据类型,它们在数据库设计时用于存储有限的、预定义的选项。这篇文章将深入探讨这两种数据类型的特性、用途以及它们之间的区别。 首先,`SET`类型允许你存储一组离散的...

    Java数据类型和MySql数据类型对应表

    在本文中,我们将详细介绍 Java 数据类型和 MySql 数据类型的对应关系。 首先,让我们来了解 MySql 数据类型。 MySql 提供了多种数据类型,包括整数类型、浮点数类型、字符串类型、日期时间类型、枚举类型等。每种...

    PostgreSQL与mysql字段对比.docx

    ENUM数据类型:在MySQL中,ENUM类型用于存储一种串对象,它的值只能是从值列表value1,value2,...中选择的一个值。 SET数据类型:在MySQL中,SET类型用于存储一种串对象,它可以具有零个或更多的值,这些值必须...

    MySQL中set类型的使用

    在这个例子中,`Interest`是一个枚举类型,它对应于MySQL`SET`类型中的值。`@ElementCollection`表示这是一个多值属性,而`@Enumerated(EnumType.STRING)`则指示Hibernate应该将枚举值存储为字符串。 在个人项目中...

    MySQL基本数据类型.docx

    16. **ENUM**: ENUM类型允许从一组预定义的值中选择一个,适用于存储有限选项的字符属性,如性别。 17. **SET**: SET类型与ENUM类似,但允许从一组预定义的值中选择0个、1个或多个,如兴趣爱好等多选属性。 选择...

    MySQL数据类型全掌握

    本文将详细介绍MySQL中的主要数据类型,并通过与Oracle数据类型的对比,帮助读者更好地理解和应用这些类型。 #### 二、MySQL数据类型详解 MySQL的数据类型大致可以分为四类:数值类型、字符串类型、日期/时间类型...

    MySQL数据类型选择

    在 DECIMAL 类型中,MySQL 使用字符串类型存储实数,以避免精度问题。但是,这也会导致查询效率下降。在 FLOAT 类型中,MySQL 使用 CPU 的浮点数计算,以提高查询效率。但是,这也会导致精度问题。因此,在选择实数...

    MySql所有字段类型及长度范围

    下面将详细介绍MySQL中的主要字段类型及其长度范围。 #### 整型数据类型 - **TINYINT[(M)][UNSIGNED][ZEROFILL]**:TINYINT 类型用于存储小整数,当没有指定 UNSIGNED 时,其取值范围为 -128 到 127;若指定了 ...

    MySql数据类型,非常详细!

    以下是对MySQL数据类型的详细阐述。 1. 整数类型: - TINYINT:占用1字节,取值范围-128到127,或无符号0到255。 - SMALLINT:占用2字节,取值范围-32768到32767,或无符号0到65535。 - MEDIUMINT:占用3字节,...

    MySQL常用数据类型.pdf

    以下是对上述【部分内容】中可能识别错误的内容进行纠正并详细解释的数据类型知识点: 1. 整数类型: - SMALLINT:表示较小的整数,取值范围通常是从-32768到32767。 - INT:表示标准的整数,取值范围是从-***到*...

    mysql的字段类型及简单的操作命令

    * ENUM:一种枚举类型,用于存储从定义的列表中选择的值。 * SET:一种集合类型,用于存储从定义的集合中选择的 0 个或多个值。 基本操作命令 MySQL 中的基本操作命令包括登录数据库、显示数据库列表、显示表列表...

    11.1: 数据库服务概述 、 构建MySQL服务 、 数据库基本管理 、 MySQL数据类型 、 总结和答疑.docx

    MySQL 数据库服务概述、构建 MySQL 服务、数据库基本管理、 MySQL 数据类型 ...本文档详细介绍了 MySQL 数据库服务的概述、构建 MySQL 服务、数据库基本管理和 MySQL 数据类型,为读者提供了详细的知识点和案例。

    MySQL字段类型列表

    以下是对MySQL5中常见字段类型的详细说明: 1. **整数类型**: - `TINYINT`: 存储范围为-128到127,占用1字节空间。 - `SMALLINT`: 存储范围为-32768到32767,占用2字节空间。 - `MEDIUMINT`: 存储范围为-...

    MySQL字段类型说明

    本节对 MySQL 字段类型进行了详细的说明,包括每个列类型的存储需求、类型性质的描述等。 数字类型: * TINYINT[(M)] [UNSIGNED] [ZEROFILL]:一个很小的整数,范围是-128 到 127(有符号)或 0 到 255(无符号)...

    MySQL_数据类型_(列表).pdf

    以上就是 MySQL 中常见数据类型的详细介绍及推荐使用场景。通过合理选择合适的数据类型,不仅可以提高数据库的查询效率,还能有效减少存储空间的需求。希望本文能够帮助您更好地理解和应用 MySQL 数据类型。

Global site tag (gtag.js) - Google Analytics