正確處理轉義字符是防止 SQL 注入、保證數據完整性的基礎。MySQL 使用反斜線 \ 作為轉義字符,支援多種轉義序列。本文系統整理轉義規則、引號處理、二進制插入與實戰建議。
| 序列 | 含義 | ASCII 碼 |
|---|---|---|
| \0 | 空字符 (NUL) | 0 |
| \n | 換行 | 10 |
| \t | 製表符 | 9 |
| \r | 回車 | 13 |
| \b | 退格 | 8 |
| \' | 單引號 | 39 |
| \" | 雙引號 | 34 |
| \\ | 反斜線本身 | 92 |
| \% | 百分號(LIKE 字面量) | 37 |
| \_ | 下劃線(LIKE 字面量) | 95 |
注意: 在非字串語境(如 SELECT '\%')返回字面 \% 而非 %。
| 外層引號 | 內部同類引號轉義 | 內部異類引號 |
|---|---|---|
| '...' | '' (兩個單引號) 或 \' | " 直接書寫 |
| "..." | "" (兩個雙引號) 或 \" | ' 直接書寫 |
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
使用 LOAD FILE 或參數化查詢最安全。若拼接 SQL,以下字符必須轉義:
| 字符 | ASCII | 轉義表示 |
|---|---|---|
| NUL | 0 | \0 |
| 反斜線 \ | 92 | \\ |
| 單引號 ' | 39 | \' |
| 雙引號 " | 34 | \" |
mysqli_real_escape_string()、Java StringEscapeUtils、Python pymysql.escape_string()。LIKE 查詢,需雙重轉義(先應用層,再 SQL 層)。NO_BACKSLASH_ESCAPES 會禁用反斜線轉義,改用雙引號/單引號重複轉義。生產環境建議不開啟此模式。utf8mb4,避免多字節字符截斷導致轉義失效。\% \_ 只在 LIKE 中有用 → 實際在字串字面量中均需轉義,否則會被視為通配符。\n 在 Windows 代表 \r\n → MySQL 中 \n 僅換行,\r 獨立表示回車。