ชนิดข้อมูล ENUM ใน MySQL สามารถกำหนดแอตทริบิวต์ต่อไปนี้ได้ ซึ่งส่งผลต่อค่าที่อนุญาต:
- NOT NULL - โดยค่าเริ่มต้น ENUM อนุญาตค่า NULL หากต้องการห้ามให้เป็น NULL ให้ใช้แอตทริบิวต์ NOT NULL
- NULL - ไม่ระบุค่าเริ่มต้น ค่าดัชนีของ NULL คือ NULL
- DEFAULT - กำหนดค่าเริ่มต้นเมื่อไม่ระบุค่าในคำสั่ง INSERT ค่า DEFAULT ที่อนุญาตสำหรับ ENUM คือ NULL และสตริงว่าง ('')
ตัวอย่าง
mysql> SET SESSION sql_mode = '';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE enumtesting(e_value ENUM('a','1') NOT NULL DEFAULT '1', id TINYINT NOT NULL);
Query OK, 0 rows affected (0.23 sec)
mysql> INSERT INTO enumtesting(e_value, id) VALUES ('1', '1'), ('', 2), (NULL, 3), ('abc', 4);
Query OK, 4 rows affected, 3 warnings (0.09 sec)
Records: 4 Duplicates: 0 Warnings: 3
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------+
| Warning | 1265 | Data truncated for column 'e_value' at row 2 |
| Warning | 1048 | Column 'e_value' cannot be null |
| Warning | 1265 | Data truncated for column 'e_value' at row 4 |
+---------+------+----------------------------------------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM enumtesting;
+---------+----+
| e_value | id |
+---------+----+
| 1 | 1 |
| | 2 |
| | 3 |
| | 4 |
+---------+----+
4 rows in set (0.00 sec)
mysql> INSERT INTO enumtesting(id) VALUES (5);
Query OK, 1 row affected (0.11 sec)
mysql> SELECT * FROM enumtesting;
+---------+----+
| e_value | id |
+---------+----+
| 1 | 1 |
| | 2 |
| | 3 |
| | 4 |
| 1 | 5 |
+---------+----+
5 rows in set (0.00 sec)
mysql> SELECT e_value, e_value+0 AS enum_index, id FROM enumtesting;
+---------+------------+----+
| e_value | enum_index | id |
+---------+------------+----+
| 1 | 2 | 1 |
| | 0 | 2 |
| | 0 | 3 |
| | 0 | 4 |
| 1 | 2 | 5 |
+---------+------------+----+
5 rows in set (0.00 sec)