首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 轉義字符完整指南:字串、識別符與二進制數據處理

     編輯:MySQL 資料庫相關知識

MySQL 轉義字符完整指南

正確處理轉義字符是防止 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

三、二進制數據插入 BLOB 必須轉義的字符

使用 LOAD FILE 或參數化查詢最安全。若拼接 SQL,以下字符必須轉義:

字符ASCII轉義表示
NUL0\0
反斜線 \92\\
單引號 '39\'
雙引號 "34\"

四、實戰最佳實踐

  1. 首選參數化查詢(PreparedStatement):驅動層自動處理轉義,杜絕 SQL 注入,效能更優(預編譯複用)。
  2. 應用層轉義函數:PHP mysqli_real_escape_string()、Java StringEscapeUtils、Python pymysql.escape_string()。
  3. 避免手動拼接 SQL:特別是含用戶輸入的 LIKE 查詢,需雙重轉義(先應用層,再 SQL 層)。
  4. SQL_MODE 影響:NO_BACKSLASH_ESCAPES 會禁用反斜線轉義,改用雙引號/單引號重複轉義。生產環境建議不開啟此模式。
  5. 字符集一致性:連接、表、列字符集統一 utf8mb4,避免多字節字符截斷導致轉義失效。

五、常見誤區

  • ❌ 以為 \% \_ 只在 LIKE 中有用 → 實際在字串字面量中均需轉義,否則會被視為通配符。
  • ❌ 雙引號字串中單引號需轉義 → 實際不需要,直接書寫即可。
  • ❌ 以為 \n 在 Windows 代表 \r\n → MySQL 中 \n 僅換行,\r 獨立表示回車。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved