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 introducerCOLLATE 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 中使用 ' 或者 ",有以下几种办法:

  • ' 引用的字符串中,可以用 '' 来表示单引号。
  • " 引用的字符串中,可以用 "" 来表示双引号。
  • 前面接转义符\
  • ' 中表示 " 或者在 " 中表示 ' 都不需要特别的处理。

更多细节