2008-12-03 116 views

回答

4

Oracle根本不支持ENUM。

8

我知道,MySQL的不支持ENUM:

  • 数据类型与相关联的弦整数值实施
  • 你可以有一个最大65.535元的单个枚举
  • 每串有一个数值等价物,从1开始依次定义
  • 该字段的数值可通过“SELECT enum_col+0
  • in non-str ICT SQL模式,分配未在列表的值并不一定产生错误,而是一种特殊的误差值被分配,而不是具有数值的数字顺序发生0
  • 排序(例如定义的顺序),而不是在所述串的字母顺序当量
  • 分配或者通过值字符串或索引号
  • 工作这样的:ENUM('0','1','2')应避免,因为'0'将具有整数值1
7

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更快。

+0

PostgreSQL从版本8.3开始支持ENUM(请参阅我的答案)。 – bortzmeyer 2008-12-09 13:29:49

+0

谢谢,编辑我的答案反映。 – mat 2008-12-09 14:42:17

2

不像什么垫表示,PostgreSQL的does support ENUM(从版本8.3 ,最后一个):

essais=> CREATE TYPE rcount AS ENUM (
essais(> 'one', 
essais(> 'two', 
essais(> 'three' 
essais(>); 
CREATE TYPE 
essais=> 
essais=> CREATE TABLE dummy (id SERIAL, num rcount); 
NOTICE: CREATE TABLE will create implicit sequence "dummy_id_seq" for serial column "dummy.id" 
CREATE TABLE 
essais=> INSERT INTO dummy (num) VALUES ('one'); 
INSERT 0 1 
essais=> INSERT INTO dummy (num) VALUES ('three'); 
INSERT 0 1 
essais=> INSERT INTO dummy (num) VALUES ('four'); 
ERROR: invalid input value for enum rcount: "four" 
essais=> 
essais=> SELECT * FROM dummy WHERE num='three'; 
id | num 
----+------- 
    2 | three 
    4 | three 

有功能,这work specifically on enums

索引适用于枚举类型的罚款。

根据手册,实施如下:

的枚举值占据在磁盘上的四个字节。枚举值的文本标签的长度受编译为PostgreSQL的NAMEDATALEN设置的限制;在标准构建中,这意味着最多63个字节。

枚举标签区分大小写,所以'happy'和'HAPPY'不一样。标签中的空间也很重要。

4

AFAIK既不是IBM DB2也不是IBM Informix Dynamic Server支持ENUM类型。