MySQL資料入庫時特殊字元處理
阿新 • • 發佈:2019-02-18
在一個字串中,如果某個序列具有特殊的含義,每個序列以反斜線符號 (“\”)開頭,稱為轉義字元。 MySQL 識別下列轉義字元:
\0
- 一個 ASCII 0 (
NUL
) 字元。 \'
- 一個 ASCII 39 單引號 (“'”) 字元。
\"
- 一個 ASCII 34 雙引號 (“"”) 字元。
\b
- 一個 ASCII 8 退格符。
\n
- 一個 ASCII 10 換行符。
\r
- 一個 ASCII 13 回車符。
\t
- 一個 ASCII 9 製表符(
TAB
)。 \z
- ASCII(26) (Control-Z)。這個字元可以處理在 Windows 系統中 ASCII(26) 代表一個檔案的結束的問題。(當使用
mysql database < filename
時 ASCII(26) 可能會引起問題產生。) \\
- 一個 ASCII 92 反斜線 (“\”) 字元。
\%
- 一個 ASCII 37 “%” 字元。它用於在正文中搜索“%”的文字例項,否則這裡“%”將解釋為一個萬用字元。
\_
- 一個 ASCII 95 “_” 字元。它用於在正文中搜索“_”的文字例項,否則這裡“_”將解釋為一個萬用字元。
注意如果在某些正文環境內使用 “\%” 或 “\_”,將返回字串 “\%” 和 “\_” 而不是 “%” 和 “_”。
字串中包含引號的可以有下列幾種寫法:
- 一個字串用單引號“'”來引用的,該字串中的單引號“'”字元可以用“''”方式轉義。
- 一個字串用雙引號“"”來引用的,該字串中的“"”
- 你也可以繼續使用在引號前加一個轉義字元“\”來轉義的方式。
- 一個字串用雙引號“"”來引用的,該字串中的單引號“'”不需要特殊對待而且不必被重複或轉義。同理,一個字串用單引號“'”來引用的,該字串中的雙引號“"”不需要特殊對待而且不必被重複或轉義。
下面顯示的 SELECT
演示引號和轉義是如何工作:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "This\nIs\nFour\nlines";
+--------------------+
| This
Is
Four
lines |
+--------------------+
如果你想要把二進位制資料插入到一個字元型別的欄位中(例如BLOB
),下列字元必須由轉義序列表示:
NUL
- ASCII 0,你應該用 “\0”(一個反斜線和一個ASCII “0”字元)表示它。
\
- ASCII 92,反斜線。需要用 “\\” 表示。
'
- ASCII 39,單引號。需要用 “\'” 表示。
"
- ASCII 34,雙引號。需要用 “\"” 表示。
你應該在任何可能包含上述特殊字元的字串中使用轉義函式!
另外,很多 MySQL API 提供了一些佔位符處理能力,這允許你在查詢語句中插入特殊標記,然後在執行查詢時對它們繫結資料值。這樣,API 會自動為你從數值中轉換它們。