本節描述如何在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
列),應該使用轉義序列表示某些字符,必須轉義反斜槓(\
)和用於引用字符串的引號字符,在某些客戶端環境中,可能還須要轉義NUL
或Control+Z
。若是沒有轉義,mysql
客戶端會截斷包含NUL
字符的引用字符串,若是沒有轉義,Windows上的文件末尾可使用Control+Z
。
在編寫應用程序時,在將字符串用做發送到MySQL服務器的SQL語句中的數據值以前,必須正確轉義任何可能包含這些特殊字符的字符串,你能夠經過兩種方式作到這一點:
mysql_real_escape_string_quote()
C API函數轉義字符,在構造其餘SQL語句的SQL語句中,可使用QUOTE()
函數,Perl DBI接口提供了一個quote
方法,用於將特殊字符轉換爲正確的轉義序列,其餘語言接口可能提供相似的功能。常量TRUE
和FALSE
的值分別爲1
和0
,常量名能夠用任何字母大小寫書寫。
mysql> SELECT TRUE, true, FALSE, false; -> 1, 1, 0, 0
NULL
值表示「沒有數據」,NULL能夠用任何大小寫。
注意,NULL
值與數值類型的0
或字符串類型的空字符串不一樣。
使用LOAD DATA
或SELECT ... INTO OUTFILE
執行爲文本文件導入或導出操做中,NULL
由\N
序列表示。
對於使用ORDER BY
排序,NULL
值在升序排序的其餘值以前排序,在降序排序的其餘值以後排序。