ข้อผิดพลาด ERROR 1064 (42000): You have an error in your SQL syntax บ่อยครั้งเกิดจากการใช้เครื่องหมายคำพูดผิดประเภท ใน MySQL มีกฎเฉพาะ:
- Backtick (
` `) - ใช้กับ ชื่อออบเจ็กต์ (database, table, column, alias) - Single Quote (
' ') - ใช้กับ ค่าสตริง (string literals) - Double Quote (
" ") - ใช้กับค่าสตริงได้ (ถ้าANSI_QUOTESปิด) แต่แนะนำให้ใช้ single quote
ตัวอย่างข้อผิดพลาด
สร้างตาราง:
CREATE TABLE Backtick_SymbolDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20),
FileName VARCHAR(30),
PRIMARY KEY (Id)
);
ผิด: ใช้ single quote ครอบชื่อคอลัมน์
INSERT INTO Backtick_SymbolDemo(`Name`, 'FileName') VALUES ('John', 'Sum.cpp');
-- ERROR 1064: You have an error in your SQL syntax near ''FileName') ...
วิธีแก้ไข
วิธีที่ 1: ใช้ backtick ครอบชื่อคอลัมน์ทั้งหมด (แนะนำ)
INSERT INTO Backtick_SymbolDemo(`Name`, `FileName`) VALUES ('John', 'Sum.cpp');
วิธีที่ 2: ไม่ใช้เครื่องหมายครอบชื่อคอลัมน์เลย (ถ้าชื่อไม่มีคำสงวน/ช่องว่าง)
INSERT INTO Backtick_SymbolDemo(Name, FileName) VALUES ('Larry', 'SocketProgram.java');
INSERT INTO Backtick_SymbolDemo(Name, FileName) VALUES ('Mike', 'UserCreationScript.sql');
ผลลัพธ์หลังแก้ไข
+----+-------+------------------------+
| Id | Name | FileName |
+----+-------+------------------------+
| 1 | John | Sum.cpp |
| 2 | Larry | SocketProgram.java |
| 3 | Mike | UserCreationScript.sql |
+----+-------+------------------------+
เมื่อไหร่ควรใช้ Backtick บังคับ
- ชื่อคอลัมน์/ตารางเป็น คำสงวน (reserved words) เช่น
order,group,select,index - ชื่อมี ช่องว่าง หรืออักขระพิเศษ
- ชื่อขึ้นต้นด้วย ตัวเลข
- ต้องการความชัดเจนและหลีกเลี่ยงความขัดแย้ง
ตัวอย่างใช้คำสงวน
CREATE TABLE `order` (`id` INT, `group` VARCHAR(10));
INSERT INTO `order` (`id`, `group`) VALUES (1, 'A');
หากไม่ใช้ backtick จะเกิด syntax error เพราะ order และ group เป็นคำสงวน
สรุป
ใช้ `backtick` สำหรับ identifier (ชื่อตาราง คอลัมน์) และ 'single quote' สำหรับ string value จะไม่เกิด ERROR 1064 จากสาเหตุนี้อีก