MySQL 8.0 参考手册  / 第9章语言结构  / 9.1 文字值  /  9.1.1 字符串文字

9.1.1 字符串文字

字符串是字节或字符的序列,用单引号 ( ') 或双引号 ( ") 字符括起来。例子:

'a string'
"another string"

彼此相邻放置的带引号的字符串连接成一个字符串。以下几行是等效的:

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

如果ANSI_QUOTES启用 SQL 模式,则字符串文字只能在单引号内引用,因为在双引号内引用的字符串被解释为标识符。

二进制字符串 是字节串。每个二进制字符串都有一个名为binary. 非二进制字符串是 一串字符。它具有不同于该字符集的字符集 binary和与该字符集兼容的排序规则。

对于这两种类型的字符串,比较都是基于字符串单元的数值。对于二进制字符串,单位是字节;比较使用数字字节值。对于非二进制字符串,单位是字符,一些字符集支持多字节字符;比较使用数字字符代码值。字符代码排序是字符串排序规则的一个函数。(有关更多信息,请参阅 第 10.8.5 节,“与 _bin 排序规则相比的二进制排序规则”。)

笔记

mysql客户端中,二进制字符串使用十六进制表示法显示,具体取决于--binary-as-hex. 有关该选项的更多信息,请参阅第 4.5.1 节,“mysql — MySQL 命令行客户端”

字符串文字可能有一个可选的字符集介绍符和COLLATE子句,以将其指定为使用特定字符集和排序规则的字符串:

[_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';

有关这些形式的字符串语法的信息,请参阅 第 10.3.7 节,“国家字符集”第 10.3.8 节,“字符集介绍者”

在字符串中,除非NO_BACKSLASH_ESCAPES启用 SQL 模式,否则某些序列具有特殊含义。这些序列中的每一个都以反斜杠 ( \) 开头,称为转义字符。MySQL 识别Table 9.1, “Special Character Escape Sequences”中显示的转义序列。对于所有其他转义序列,反斜杠将被忽略。也就是说,转义字符被解释为就好像它没有转义一样。例如,\x只是x. 这些序列区分大小写。例如, \b被解释为退格键,但 \B被解释为B. 根据 character_set_connection系统变量指示的字符集进行转义处理。即使对于前面有指示不同字符集的介绍符的字符串也是如此,如第 10.3.6 节“字符串文字字符集和排序规则”中所述。

表 9.1 特殊字符转义序列

转义序列 序列表示的字符
\0 一个 ASCII NUL ( X'00') 字符
\' 单引号 ( ') 字符
\" 双引号 ( ") 字符
\b 退格字符
\n 换行(换行)字符
\r 一个回车符
\t 制表符
\Z ASCII 26(控制+Z);见表后的注释
\\ 反斜杠 ( \) 字符
\% 一个%角色;见表后的注释
\_ 一个_角色;见表后的注释

可以对 ASCII 26 字符进行编码\Z ,使您能够解决 ASCII 26 在 Windows 上代表 END-OF-FILE 的问题。如果您尝试在文件中使用 ASCII 26 会导致问题。 mysql db_name < file_name

\%\_序列用于搜索模式匹配上下文中的和的文字实例, 否则% 它们_将被解释为通配符。请参阅第 12.8.1 节“字符串比较函数和运算符”LIKE中运算 符的说明。如果您 在模式匹配上下文之外 使用or ,它们的计算结果为字符串and ,而不是 and 。 \%\_\%\_%_

有几种方法可以在字符串中包含引号字符:

  • '用 引用的字符串中 的 A'可以写为 ''.

  • "用 引用的字符串中 的 A"可以写为 "".

  • Precede the quote character by an escape character (\).

  • A ' inside a string quoted with " needs no special treatment and need not be doubled or escaped. In the same way, " inside a string quoted with ' needs no special treatment.

The following SELECT statements demonstrate how quoting and escaping work:

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 |
+------------------------+

To insert binary data into a string column (such as a BLOB column), you should represent certain characters by escape sequences. Backslash (\) and the quote character used to quote the string must be escaped. In certain client environments, it may also be necessary to escape NUL or Control+Z. The mysql client truncates quoted strings containing NUL characters if they are not escaped, and Control+Z may be taken for END-OF-FILE on Windows if not escaped. For the escape sequences that represent each of these characters, see Table 9.1, “Special Character Escape Sequences”.

When writing application programs, any string that might contain any of these special characters must be properly escaped before the string is used as a data value in an SQL statement that is sent to the MySQL server. You can do this in two ways:

  • Process the string with a function that escapes the special characters. In a C program, you can use the mysql_real_escape_string_quote() C API function to escape characters. See mysql_real_escape_string_quote(). Within SQL statements that construct other SQL statements, you can use the QUOTE() function. The Perl DBI interface provides a quote method to convert special characters to the proper escape sequences. See Section 27.9, “MySQL Perl API”. Other language interfaces may provide a similar capability.

  • 作为显式转义特殊字符的替代方法,许多 MySQL API 提供占位符功能,使您能够将特殊标记插入语句字符串,然后在发出语句时将数据值绑定到它们。在这种情况下,API 会为您转义值中的特殊字符。