MySql字元轉義

來源:互聯網
上載者:User

在字串中,某些序列具有特殊含義。這些序列均用反斜線(‘\’)開始,即所謂的逸出字元。MySQL識別下面的逸出序列:

\0

ASCII 0(NUL)字元。

\'

單引號(‘'’)。

\"

雙引號(‘"’)。

\b

退格符。

\n

分行符號。

\r

斷行符號符。

\t

tab字元。

\Z

ASCII 26(控制(Ctrl)-Z)。該字元可以編碼為‘\Z’,以允許你解決在Windows中ASCII 26代表檔案結尾這一問題。(如果你試圖使用mysql db_name < file_name,ASCII 26會帶來問題)。

\\

反斜線(‘\’)字元。

\%

‘%’字元。參見表後面的註解。

\_

‘_’字元。參見表後面的註解。

這些序列對大小寫敏感。例如,‘\b’解釋為退格,但‘\B’解釋為‘B’。

‘\%’和‘\_’序列用於搜尋可能會解釋為萬用字元的模式比對環境中的‘%’和‘_’文字執行個體。參見12.3.1節,“字串比較函數”。請注意如果你在其它環境中使用‘\%’或‘\_’,它們返回字串‘\%’和‘\_’,而不是‘%’和‘_’。

在其它逸出序列中,反斜線被忽略。也就是說,逸出字元解釋為彷彿沒有轉義。

有幾種方式可以在字串中包括引號:

·         在字串內用‘'’引用的‘'’可以寫成‘''’。

·         在字串內用‘"’引用的‘"’可以寫成‘""’。

·         可以在引號前加逸出字元(‘\’)。

·         在字串內用‘"’引用的‘'’不需要特殊處理,不需要用雙字元或轉義。同樣,在字串內用‘'’引用的‘"’也不需要特殊處理。

下面的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 |
+--------------------+
 
mysql> SELECT 'disappearing\ backslash';
+------------------------+
| disappearing backslash |
+------------------------+

如果你想要在字串列插入入位元據(例如BLOB),必須通過逸出序列表示下面的字元:

NUL

NUL位元組(ASCII 0)。用‘\0’表示該字元(反斜線後面跟一個ASCII‘0’字元)。

\

反斜線(ASCII 92)。用‘\\’表示該字元。

'

單引號(ASCII 39)。用‘\'’表示該字元。

"

雙引號(ASCII 34)。用‘\"’表示該字元。

當編寫應用程式時,在包含這些特殊字元的字串用於發送到MySQL伺服器的SQL語句中的資料值之前,必須對它們正確進行轉義。可以用兩種方法來完成:

·         用轉義特殊字元的函數處理字串。例如,在C程式中,可以使用mysql_real_escape_string() C API函數來逸出字元。參見25.2.3.52節,“mysql_real_escape_string()”。Perl DBI介面提供一個quote方法來將特殊字元轉換為正確的逸出序列。參見25.4節,“MySQL Perl API”。

·         顯式轉義特殊字元,許多MySQL API提供了預留位置功能,允許你在查詢字串中插入特殊標記,然後當你發出查詢時將資料值同它們綁定起來。在這種情況下,API關注轉義值中的特殊字元。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.