ENUM Type
The ENUM type is a string object whose value is selected from a list of values specified when a column is defined during table creation. To use the MySQL-compatible enum type, ensure that CREATE DATABASE test_db with dbcompatibility is set to 'B'.
Creating and Using ENUM Columns
- The enumerated value must be a character string. For example, to create a table that contains a column of ENUM type, run the following command: - CREATE TABLE staff ( name VARCHAR(40), gender ENUM('male', 'female') ); INSERT INO staff (name, gender) VALUES ('Tom','male'), ('Jenny','female') SELECT name, gender FROM staff WHERE gender = 'male'; name | gender ---------+-------- Tom | male (1 row)
- The enumerated value string cannot contain 'anonymous_enum'. In addition, an existing type cannot be renamed to a name containing 'anonymous_enum'. If an existing type contains 'anonymous_enum', the following error message is displayed: - CREATE TYPE country_anonymous_enum_1 AS enum('CHINA','USA'); ERROR: enum type name "country_anonymous_enum_1" can't contain "anonymous_enum"
Index of an enumerated value
- Each enumerated value is assigned an index value starting from 1 based on the sequence of enumerated values in the column definition. 
- The index of the NULL value is 0. 
- The index refers to the position of the enumerated value in the list when the enumerated value is created, which is irrelevant to the position in the table. For example, a column specified as ENUM('male', 'female') has the following enumerated values and indexes: 
| Value | Index | 
|---|---|
| NULL | 0 | 
| 'male' | 1 | 
| 'female' | 2 | 
- You can use the index number to insert enumerated values in ENUM or filter enumerated values using the index number in the WHERE clause as follows:
INSERT INTO staff (name, size) VALUES ('Jone',1);
SELECT name, gender FROM staff WHERE gender = 1;
   name    | gender  
------------+-------
   Tom     | male
   Jone    | male
(2 rows)
- If the index value used exceeds the number of enumerated values or is a negative value, an error occurs. - INSERT INTO staff (name, gender) VALUES ('Lara',4); ERROR: enum order 4 out of the enum value size: 2 LINE 1: INSERT INTO staff (name, gender) VALUES ('Lara',4); ^ CONTEXT: referenced column: size
Null Values and Empty Strings
- The enumerated value can be NULL, and the empty string '' is also considered as NULL.
- If you insert an invalid value (that is, a string that does not exist in the enumerated value list) into an ENUM column, an error occurs.
Enumeration Restrictions
- Numbers cannot be used as enumerated values. If you want to use a number as an enumerated value, enclose it in quotation marks to convert it into a string. If there is no quotation mark, the number is used as an index.
- The value of in the ENUM definition cannot contain duplicate enumerated values.
- The ENUM value can contain a maximum of 63 characters.
- There is no restriction on the maximum number of elements in the enumerated values of ENUM.