接下来提出这个问题:" 数据库枚举 - 优点和缺点 ",我想知道哪些数据库系统支持枚举数据类型,以及有关它们如何执行的一些细节(例如,内部存储的内容,限制是什么,查询语法含义,索引含义,...).
用例的讨论或利弊应该在其他问题中进行.
我知道MySQL确实支持ENUM:
数据类型实现为具有关联字符串的整数值
单个枚举最多可以有65.535个元素
每个字符串都有一个数字等价物,按照定义的顺序从1开始计数
该字段的数值可通过" SELECT enum_col+0
" 访问
在非严格的SQL模式下,分配not-in-list值不一定会导致错误,而是分配一个特殊的错误值,数值为0
排序以数字顺序(例如,定义的顺序)发生,而不是字符串等价物的字母顺序
赋值可以通过值字符串或索引号来工作
这个:ENUM('0','1','2')
应该避免,因为它'0'
会有整数值1
PostgreSQL从8.3开始支持ENUM.对于旧版本,您可以使用:
您可以通过执行以下操作来模拟ENUM:
CREATE TABLE persons ( person_id int not null primary key, favourite_colour varchar(255) NOT NULL, CHECK (favourite_colour IN ('red', 'blue', 'yellow', 'purple')) );
你也可以:
CREATE TABLE colours ( colour_id int not null primary key, colour varchar(255) not null ) CREATE TABLE persons ( person_id int not null primary key, favourite_colour_id integer NOT NULL references colours(colour_id), );
当你了解最喜欢的颜色时,你可以添加一个连接,但是你可以通过在颜色表中添加一个条目来添加颜色,而不是每次都不需要更改模式.您还可以为颜色添加属性,例如HTML代码或RVB值.
您也可以创建自己的类型来执行枚举,但我认为它不会比varchar和CHECK
.