ปัญหา
ต้องการเก็บข้อความที่มีเครื่องหมายคำพูดคู่ (Double quotes) อยู่ภายใน เช่น "John" แต่ MySQL ใช้ Single quote คั่น String ทำให้เกิด Confusion
วิธีแก้: ใช้ Backslash (\) Escape
ใช้ \\\" ภายใน String ที่คั่นด้วย Single quote
รูปแบบคำสั่ง
INSERT INTO table_name VALUES('\\"value\\"');
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.63 sec)
2. เพิ่มข้อมูลพร้อม Double Quotes
mysql> INSERT INTO DemoTable VALUES('\\"John\\"');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES('\\"Chris\\"');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES('\\"Adam Smith\\"');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('\\"Carol\\"');
Query OK, 1 row affected (0.20 sec)
3. แสดงข้อมูล
mysql> SELECT * FROM DemoTable;
ผลลัพธ์ (Double quotes ถูกเก็บไว้จริง):
+--------------+ | Name | +--------------+ | "John" | | "Chris" | | "Adam Smith" | | "Carol" | +--------------+ 4 rows in set (0.00 sec)
วิธีอื่นๆ ในการจัดการ Quote
1. ใช้ Double Quote คั่น String (ANSI SQL Mode)
-- ต้อง SET sql_mode='ANSI_QUOTES' ก่อน
INSERT INTO DemoTable VALUES("\"John\"");
2. ใช้ Quote Function (สำหรับ Dynamic SQL)
SELECT QUOTE('"John"'); -- ผลลัพธ์: '"John"' (พร้อม Escape แล้ว)
3. Prepared Statement (Parameter Binding) - แนะนำสำหรับ Application
-- ไม่ต้องกังวล Escape เอง Driver จัดการให้ PREPARE stmt FROM 'INSERT INTO DemoTable VALUES(?)'; SET @name = '"John"'; EXECUTE stmt USING @name;
Escape Characters อื่นๆ ใน MySQL
| Escape Sequence | ตัวอักษร |
|---|---|
| \\0 | Null character (ASCII 0) |
| \\' | Single quote |
| \\" | Double quote |
| \\b | Backspace |
| \\n | Newline |
| \\r | Carriage return |
| \\t | Tab |
| \\z | Ctrl+Z (Windows EOF) |
| \\\\ | Backslash |
| \\% | % (ใน LIKE pattern) |
| \\_ | _ (ใน LIKE pattern) |
Best Practice
- ใช้ Prepared Statement / Parameterized Query ใน Application Code (ป้องกัน SQL Injection + จัดการ Quote อัตโนมัติ)
- หลีกเลี่ยงการเก็บ Quote ใน Database หากไม่จำเป็น (Normalize/Transform ก่อน Insert)
- ใช้ JSON Data Type (MySQL 5.7+) สำหรับข้อมูลโครงสร้างที่มี Quote ซับซ้อน