จริงๆ แล้วสมาชิกที่ระบุในข้อกำหนดคอลัมน์ ENUM จะได้รับหมายเลขดัชนีเริ่มจาก 1 คำว่า "ดัชนี" ในที่นี้หมายถึงตำแหน่งภายในรายการค่า ENUM ไม่เกี่ยวข้องกับดัชนีของตาราง เราสามารถแสดงได้หลายวิธีดังนี้:
1. การแทรกค่าดัชนีแทนค่า ENUM
เราสามารถแทรกค่าในคอลัมน์ ENUM โดยใช้หมายเลขดัชนีแทนการเขียนค่า ตัวอย่างเช่น ในตารางที่มีค่า ENUM เป็น 'Pass' และ 'Fail' โดย 'Pass' อยู่ลำดับแรกจึงมีดัชนี 1 และ 'Fail' มีดัชนี 2 เราสามารถแทรกได้ดังนี้:
mysql> INSERT INTO marks(id, name, result) VALUES (103, 'Daksh', '1'); Query OK, 1 row affected (0.06 sec) mysql> INSERT INTO marks(id, name, result) VALUES (104, 'Shayra', '2'); Query OK, 1 row affected (0.07 sec) mysql> SELECT * FROM marks; +-----+---------+--------+ | id | Name | Result | +-----+---------+--------+ | 101 | Aarav | Pass | | 102 | Yashraj | Fail | | 103 | Daksh | Pass | | 104 | Shayra | Fail | +-----+---------+--------+ 4 rows in set (0.00 sec)
ในคิวรีข้างต้น เราใช้หมายเลขดัชนี 1 และ 2 สำหรับค่า ENUM 'Pass' และ 'Fail' ตามลำดับ
2. การแทรกสตริงว่างแทนค่า ENUM
ค่าดัชนีของสตริงว่างคือ 0 ก่อนแทรกสตริงว่าง โหมด SQL ต้องไม่เป็น TRADITIONAL, STRICT_TRANS_TABLES หรือ STRICT_ALL_TABLES
mysql> SET SESSION sql_mode = ''; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO marks(id, name, result) VALUES (105, 'Yashraj', ''); Query OK, 1 row affected, 1 warning (0.06 sec)
คิวรีข้างต้นจะแทรกสตริงว่างพร้อมคำเตือน:
mysql> SHOW WARNINGS; +---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1265 | Data truncated for column 'Result' at row 1 | +---------+------+---------------------------------------------+ 1 row in set (0.00 sec)
ตรวจสอบตาราง จะเห็นสตริงว่างในฟิลด์ ENUM:
mysql> SELECT * FROM marks; +-----+---------+--------+ | id | Name | Result | +-----+---------+--------+ | 101 | Aarav | Pass | | 102 | Yashraj | Fail | | 103 | Daksh | Pass | | 104 | Shayra | Fail | | 105 | Yash | | +-----+---------+--------+ 5 rows in set (0.00 sec) mysql> SELECT result+0 AS result_index FROM marks; +--------------+ | result_index | +--------------+ | 1 | | 2 | | 1 | | 2 | | 0 | +--------------+ 5 rows in set (0.01 sec)
จากผลลัพธ์ข้างต้น ชัดเจนว่าค่าดัชนีของสตริงว่างคือ 0
3. การแทรก NULL แทนค่า ENUM
เราสามารถแทรก NULL ได้หากไม่ระบุ NOT NULL กับคอลัมน์ ENUM ค่าดัชนีของ NULL คือ NULL
mysql> CREATE TABLE result(Id INT PRIMARY KEY NOT NULL, Name VARCHAR(10), Grade ENUM('POOR', 'GOOD'));
Query OK, 0 rows affected (0.25 sec)
mysql> INSERT INTO result(id, name, grade) VALUES (100, 'Rahul', NULL);
Query OK, 1 row affected (0.06 sec)
ตรวจสอบว่าค่าดัชนีของ NULL คือ NULL:
mysql> SELECT Grade+0 AS Grade_index FROM result; +-------------+ | Grade_index | +-------------+ | NULL | +-------------+ 1 row in set (0.00 sec)