MySQL™ 參考手冊(字面值)

字面值

本節描述如何在MySQL中編寫字面值,這些參數包括字符串、數字、十六進制和位值、布爾值和NULL,本節還將介紹在MySQL中處理這些基本類型時可能遇到的各類細微差異。mysql

字符串字面值

字符串是一個字節或字符序列,包含在單引號(')或雙引號(")字符中,例如:sql

'a string'
"another string"

相互相鄰的引用字符串鏈接爲單個字符串,下列行是等價的:服務器

'a string'
'a' ' ' 'string'

若是啓用了ANSI_QUOTES SQL模式,字符串字面值只能用單引號括起來,由於雙引號括起來的字符串被解釋爲標識符。app

二進制字符串是由字節組成的字符串,每一個二進制字符串都有一個名爲binary的字符集和排序規則。非二進制字符串是一串字符,它有一個非二進制的字符集和一個與字符集兼容的排序規則。函數

對於這兩種類型的字符串,都基於字符串單元的數值比較,對於二進制字符串,單位是字節,使用數值字節值比較。對於非二進制字符串,單位是字符,有些字符集支持多字節字符,使用數字字符碼值比較,字符碼排序是字符串排序的函數。編碼

字符串字面值能夠有一個可選的字符集導入器和COLLATE子句,將其指定爲使用特定字符集和排序規則的字符串:code

[_charset_name]'string' [COLLATE collation_name]

例如:排序

SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8'string' COLLATE utf8_danish_ci;

可使用N'literal'(或n'literal')在國際字符集中建立字符串,這些語句是等價的:接口

SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';

在字符串中,除非啓用NO_BACKSLASH_ESCAPES SQL模式,不然某些序列具備特殊的含義,每一個序列都以反斜槓(\)開頭,稱爲轉義字符。MySQL識別下表中所示的轉義序列,對於全部其餘轉義序列,將忽略反斜槓,也就是說,轉義字符被解釋爲沒有轉義,例如,\x就是x。這些序列是區分大小寫的,例如,\b被解釋爲退格,可是\B被解釋爲B,轉義處理是根據character_set_connection系統變量所表示的字符集來完成的,即便對於前面有一個表示不一樣字符集的導入器的字符串也是如此。ci

轉義序列 序列表示字符
\0 ASCII NUL(X'00')字符
\' 單引號(')字符
\" 雙引號(")字符
\b 退格字符
\n 換行字符
\r 回車字符
\t 製表符
\Z ASCII 26(Control+Z)
\\ 反斜槓(\)字符
\% %字符
\_ _字符

ASCII 26字符能夠編碼爲\Z,以使你可以解決ASCII 26在Windows上表明文件結束的問題,若是試圖使用mysql db_name < file_name,文件中的ASCII 26會致使問題。

\%\_序列用於在模式匹配上下文中搜索%_的文本實例,不然它們將被解釋爲通配符,若是在模式匹配上下文以外使用\%\_,它們的值是字符串\%\_,而不是%_

有幾種方法能夠在字符串中包含引用字符:

  • 在字符串內加上引號'能夠寫成''
  • 在字符串內加上雙引號"能夠寫成""
  • 在引用字符以前加上轉義字符(\)。
  • "字符串內部加上'不須要特殊處理’,也不須要重複或轉義,一樣的道理,在'字符串內部加上"不須要特殊處理’。

下面的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列),應該使用轉義序列表示某些字符,必須轉義反斜槓(\)和用於引用字符串的引號字符,在某些客戶端環境中,可能還須要轉義NULControl+Z。若是沒有轉義,mysql客戶端會截斷包含NUL字符的引用字符串,若是沒有轉義,Windows上的文件末尾可使用Control+Z

在編寫應用程序時,在將字符串用做發送到MySQL服務器的SQL語句中的數據值以前,必須正確轉義任何可能包含這些特殊字符的字符串,你能夠經過兩種方式作到這一點:

  • 使用轉義特殊字符的函數處理字符串,在C程序中,可使用mysql_real_escape_string_quote() C API函數轉義字符,在構造其餘SQL語句的SQL語句中,可使用QUOTE()函數,Perl DBI接口提供了一個quote方法,用於將特殊字符轉換爲正確的轉義序列,其餘語言接口可能提供相似的功能。
  • 做爲顯式轉義特殊字符的替代方法,許多MySQL API提供了佔位符功能,使你可以將特殊標記插入到語句字符串中,而後在發出語句時將數據值綁定到它們,在本例中,API負責爲你轉義值中的特殊字符。

Boolean字面值

常量TRUEFALSE的值分別爲10,常量名能夠用任何字母大小寫書寫。

mysql> SELECT TRUE, true, FALSE, false;
        -> 1, 1, 0, 0

NULL值

NULL值表示「沒有數據」,NULL能夠用任何大小寫。

注意,NULL值與數值類型的0或字符串類型的空字符串不一樣。

使用LOAD DATASELECT ... INTO OUTFILE執行爲文本文件導入或導出操做中,NULL\N序列表示。

對於使用ORDER BY排序,NULL值在升序排序的其餘值以前排序,在降序排序的其餘值以後排序。

相關文章
相關標籤/搜索