สาเหตุ
desc เป็น reserved word ของ MySQL (ใช้สำหรับคำสั่ง DESCRIBE หรือ ORDER BY ... DESC) จึงไม่สามารถใช้เป็นชื่อคอลัมน์ได้โดยตรง
วิธีแก้ไข: ใช้ Backticks
ห่อชื่อคอลัมน์ด้วย backtick (` `) เพื่อบอก MySQL ว่านี้เป็น identifier ไม่ใช่ keyword
ตัวอย่างการสร้างตาราง
mysql> create table useOfDescColumnNameDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> `desc` varchar(200) default 'GOOD'
-> );
Query OK, 0 rows affected (0.60 sec)
เพิ่มข้อมูลทดสอบ
mysql> insert into useOfDescColumnNameDemo(Name) values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into useOfDescColumnNameDemo(Name) values('Bob');
Query OK, 1 row affected (0.16 sec)
mysql> insert into useOfDescColumnNameDemo(Name) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into useOfDescColumnNameDemo(Name) values('Sam');
Query OK, 1 row affected (0.13 sec)
Query ข้อมูลทั้งหมด
mysql> select * from useOfDescColumnNameDemo;
+----+-------+------+ | Id | Name | desc | +----+-------+------+ | 1 | John | GOOD | | 2 | Bob | GOOD | | 3 | Carol | GOOD | | 4 | Sam | GOOD | +----+-------+------+
Query เฉพาะคอลัมน์ desc (ต้องใช้ backticks)
mysql> select `desc` from useOfDescColumnNameDemo;
+------+ | desc | +------+ | GOOD | | GOOD | | GOOD | | GOOD | +------+
แนวทางปฏิบัติที่ดี: หลีกเลี่ยงการใช้ reserved words เป็นชื่อคอลัมน์ หากจำเป็นต้องใช้ ให้ใช้ backticks ทุกครั้งที่อ้างอิง