本节描述如何在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
值在升序排序的其余值以前排序,在降序排序的其余值以后排序。