Mysql 字符串字面值
字符串字面值是由单引号(’)或双引号(“)括起来的一系列字节或字符。例如:
'a string' "another string"
相邻的引号字符串会连接成一个字符串。下面的几行是等价的:
'a string' 'a' ' ' 'string'
如果启用了ANSI_QUOTES SQL模式,字符串字面值只能在单引号内进行引用,因为在双引号内引用的字符串会被解释为标识符。
二进制字符串是一系列字节。每个二进制字符串都有一个名为binary的字符集和排序规则。非二进制字符串是一系列字符。它具有不同于binary的字符集和与字符集兼容的排序规则。
对于这两种类型的字符串,比较是基于字符串单元的数值值进行的。对于二进制字符串,单元是字节;比较使用数值字节值。对于非二进制字符串,单元是字符,并且某些字符集支持多字节字符;比较使用数值字符编码值。字符编码顺序是字符串排序规则的一个功能。
注意 在mysql客户端中,二进制字符串以十六进制表示,取决于–binary-as-hex选项的值。
字符字符串字面值可以具有可选的字符集引导符和COLLATE子句,以指定使用特定字符集和排序规则的字符串:
[_charset_name]'string' [COLLATE collation_name]
例如:
SELECT _latin1'string'; SELECT _binary'string'; SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
您可以使用N’literal’(或n’literal’)创建一个使用国家字符集的字符串。下面的语句是等价的:
SELECT N'some text'; SELECT n'some text'; SELECT _utf8'some text';
在字符串中,除非启用了NO_BACKSLASH_ESCAPES SQL模式,否则某些序列具有特殊含义。这些序列以反斜杠()开头,称为转义字符。对于不在表中的所有其他转义序列,反斜杠将被忽略。也就是说,转义字符被解释为未转义的字符。例如,。这些序列是区分大小写的。例如,,但。转义处理根据character_set_connection系统变量指示的字符集进行。
转义序列 | 序列表示的字符 |
---|---|
\0
|
ASCII的空字符(X’00’) |
\'
|
单引号(’)字符 |
\"
|
双引号(“)字符 |
\b
|
退格字符 |
\n
|
换行(换行符)字符 |
\r
|
回车字符 |
\t
|
制表符 |
\Z
|
ASCII 26(Control+Z) |
\\
|
反斜杠()字符 |
\%
|
%字符 |
\_
|
_字符 |
ASCII 26字符可以编码为,以使您能够解决ASCII 26在Windows上表示END-OF-FILE的问题。如果文件中存在ASCII 26,如果不进行转义,则会引起问题,因为在Windows上,Control+Z可能被视为END-OF-FILE。
在编写应用程序时,任何可能包含特殊字符的字符串在将该字符串用作发送到MySQL服务器的SQL语句中的数据值之前,必须进行适当的转义。有两种方法可以做到这一点:
- 使用转义特殊字符的函数处理字符串。在C程序中,可以使用mysql_real_escape_string_quote() C API函数来转义字符。在构造其他SQL语句的SQL语句中,可以使用QUOTE()函数。Perl DBI接口提供了一个quote方法,将特殊字符转换为适当的转义序列。
- 作为显式转义特殊字符的替代方法,许多MySQL API提供了一个占位符功能,使您可以在语句字符串中插入特殊标记,然后在发出语句时将数据值绑定到它们。在这种情况下,API会为您转义值中的特殊字符。