String Literals
String Literals 是一个 bytes 或者 characters 的序列,两端被单引号 '
或者双引号 "
包围,例如:
'example string'
"example string"
如果字符串是连续的,会被合并为一个独立的 string。以下表示是一样的:
'a string'
'a' ' ' 'string'
"a" ' ' "string"
如果 ANSI_QUOTES
SQL MODE 开启了,那么只有单引号内的会被认为是 String Literals,对于双引号内的字符串,会被认为是一个 identifier。
binary string 是一串 bytes 组成的字符串,每一个 binary string 有一个叫做 binary
的 character set 和 collation。一个非二进制的字符串是一个由字符组成的字符串,它有除 binary
外的 character set和与之兼容的 collation。
对于两种字符串类型,比较都是基于每个字符的数值。对于 binary string 而言,比较单元就是字节,对于非二进制的字符串,那么单元就是字符,而有的字符集支持多字节字符。
一个 String Literal 可以拥有一个可选的 character set introducer
和 COLLATE clause
,可以用来指派特定的字符集跟 collation(TiDB 对此只是做了语法上的兼容,并不实质做处理)。
[_charset_name]'string' [COLLATE collation_name]
例如:
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8'string' COLLATE utf8_bin;
你可以使用 N’literal’ 或者 n’literal’ 来创建使用 national character set 的字符串,下列语句是一样的:
SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';
转义字符:
转义序列 | 意义 |
---|---|
\0 | ASCII NUL (X’00’) 字符 |
\’ | 单引号 |
\” | 双引号 |
\b | 退格符号 |
\n | 换行符 |
\r | 回车符 |
\t | tab 符(制表符) |
\z | ASCII 26 (Ctrl + Z) |
\ | 反斜杠 \ |
\% | % |
_ | _ |
如果要在 string literal 中使用 '
或者 "
,有以下几种办法:
- 在
'
引用的字符串中,可以用''
来表示单引号。 - 在
"
引用的字符串中,可以用""
来表示双引号。 - 前面接转义符
\
。 - 在
'
中表示"
或者在"
中表示'
都不需要特别的处理。
更多细节。