ปัญหา
ใน SQL String literal ใช้ Single Quote (') ปิดเปิด หากข้อความมี Single Quote อยู่ภายใน (เช่น You've) จะทำให้ Syntax Error
วิธีแก้: ใช้ Double Quote ปิดเปิด String
MySQL รองรับ Double Quote (") เป็น String Delimiter (ถ้าไม่ตั้งค่า ANSI_QUOTES SQL Mode)
ตัวอย่างสมบูรณ์
1. สร้างตาราง
CREATE TABLE DemoTable (Note TEXT);
2. Insert ด้วย Double Quote
INSERT INTO DemoTable VALUES ("You've seen the Taj? When?");
INSERT INTO DemoTable VALUES ("You've visited the US?");
3. ผลลัพธ์
SELECT * FROM DemoTable;
+---------------------------------+
| Note |
+---------------------------------+
| You've seen the Taj? When? |
| You've visited the US? |
+---------------------------------+
วิธีอื่นๆ ในการจัดการ Quote
1. Escape ด้วย Backslash (\)
INSERT INTO DemoTable VALUES ('You\'ve seen the Taj?');
2. Double Single Quote ('')
INSERT INTO DemoTable VALUES ('You''ve seen the Taj?');
ใน SQL Standard: สอง Single Quote ติดกัน = Single Quote หนึ่งตัวในสตริง
3. ใช้ QUOTE() Function
INSERT INTO DemoTable VALUES (QUOTE("You've seen the Taj?"));
-- QUOTE() จะคืนค่าที่ Escape แล้ว พร้อม Quote ครอบ
สรุปวิธีต่างๆ
| วิธี | ตัวอย่าง | หมายเหตุ |
|---|---|---|
| Double Quote | "You've" | ง่ายที่สุด ต้องไม่มี ANSI_QUOTES mode |
| Escape Backslash | 'You\'ve' | มาตรฐาน ต้องการ backslash |
| Double Single Quote | 'You''ve' | ANSI SQL Standard |
| QUOTE() | QUOTE("You've") | อัตโนมัติ Escape และ Quote |
ข้อแนะนำ
- ใน Application ใช้ Prepared Statement (Parameterized Query) ไม่ต้องกังวล Quote
- เขียน SQL ตรงๆ: ใช้ Double Quote หรือ Double Single Quote
- ตั้งค่า
sql_modeให้รวมNO_BACKSLASH_ESCAPESหากต้องการความปลอดภัย