字符串是由单引号(')或双引号(")字符引起的字节或字符序列。例子:
'a string'
"another string"
彼此相邻的带引号的字符串被串联为单个字符串。以下几行是等效的:
'a string'
'a' ' ' 'string'
如果SQ用启了LANSI_QUOTES模式,则字符串文字只能在单引号中引起来,因为双引号中引起的字符串被解释为标识符。
二进制字符串是字节字符串。每个二进制字符串都有一个名为binary的字符集和排序规则。非二进制字符串是一个字符串。它具有二进制以外的字符集和与字符集兼容的排序规则。
对于这两种类型的字符串,比较都是基于字符串单位的数值进行的。对于二进制字符串,单位是字节。比较使用数字字节值。对于非二进制字符串,单位是字符,某些字符集支持多字节字符,比较使用数字字符代码值。
字符串文字可能具有可选的字符集介绍程序和COLLATE子句,以将其指定为使用特定字符集和排序规则的字符串:
[_charset_name]'string' [COLLATE collation_name]
您可以使用 (或 )在国家字符集中创建一个字符串。这些语句是等效的:可以使用N'literal'(或N'literal')在国家字符集中创建字符串。这些陈述相当于:
SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';
在字符串中,某些序列具有特殊含义,除非NO_BACKSLASH_ESCAPES启用了SQL模式。每个序列都以反斜杠(\)开头,即转义字符。MySQL可以识别表9.1“特殊字符转义序列”中所示的转义序列。对于所有其他转义序列,将忽略反斜杠。即,将转义字符解释为好像没有转义。例如,\xis x。这些序列区分大小写。例如, \b被解释为退格,但 \B被解释为B。根据character_set_connection系统变量指示的字符集进行转义处理
表9.1特殊字符转义序列
转义序列
序列表示的字符
\0
ASCII NUL(X'00')字符
\'
单引号(')字符
\"
双引号(")字符
\b
退格字符
\n
换行符(换行符)
\r
回车符
\t
制表符
\Z
ASCII 26(Control + Z); 请参阅表格后面的注释
\
反斜杠(\)字符
\%
一个%角色;请参阅表格后面的注释
_
一个_角色;请参阅表格后面的注释
以下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 |
+------------------------+