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:

ValueIndex
NULL0
'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.
Feedback
编组 3备份
    openGauss 2024-05-19 00:42:09
    cancel