Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: แก้ไข ERROR 1064 เรื่องเครื่องหมายคำพูด ใช้ Backtick แทน Single Quote

ข้อผิดพลาด 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 จากสาเหตุนี้อีก