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

เพิ่มข้อมูลที่มีเครื่องหมายคำพูดคู่ (") ใน MySQL ด้วย Escape Character


ปัญหา

ต้องการเก็บข้อความที่มีเครื่องหมายคำพูดคู่ (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 ซับซ้อน