核心轉義序列
| 序列 | 含義 | ASCII |
\0 | NUL 字元 | 0 |
\n | 換行 | 10 |
\t | 定位符 | 9 |
\r | 歸位 | 13 |
\b | 退格 | 8 |
\' | 單引號 | 39 |
\" | 雙引號 | 34 |
\\ | 反斜線 | 92 |
\% | 字面 %(LIKE 模式) | 37 |
\_ | 字面 _(LIKE 模式) | 95 |
注意:在某些字串語境下 \%/\_ 會保留反斜線,實際儲存為 \%/\_ 而非 %/_。
引號包裹與轉義規則
必須轉義
- 單引號字串內的單引號:
\' 或 ''(重複)。
- 雙引號字串內的雙引號:
\" 或 ""。
無需轉義
- 單引號字串內的雙引號:直接寫
"。
- 雙引號字串內的單引號:直接寫
'。
示範查詢
SELECT 'hello', '"hello"', '""hello""', 'hel\'lo', '\'hello';
+-------+----------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+----------+-----------+--------+--------+
SELECT "hello", "'hello'", "''hello''", "hel\"lo", "\"hello";
+-------+----------+-----------+---------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+----------+-----------+---------+--------+
SELECT "This\nIs\nFour\nlines";
+--------------------+
| This
Is
Four
lines |
+--------------------+
二進位資料插入 BLOB 必須轉義的字元
| 字元 | ASCII | 轉義序列 |
| NUL | 0 | \0 |
| 反斜線 | 92 | \\ |
| 單引號 | 39 | \' |
| 雙引號 | 34 | \" |
最佳實踐
- 應用層**使用參數化查詢**(Prepared Statement),驅動自動處理轉義,杜絕手工拼接。
- 若必須手工構建 SQL,務必使用驅動提供的轉義函數(如 PHP
mysql_real_escape_string、Java PreparedStatement、Python cursor.execute(sql, params))。
- 避免在 SQL 中直接嵌入二進位資料,改用參數綁定或
LOAD FILE。