跳到主要内容

字符表达式字符集和字符序

每个字符表达式都有一个字符集和一个字符序。

指定字符表达式的字符集和字符序

对于简单语句 SELECT 'string',该字符表达式的默认字符集和字符序由 character_set_connectioncollation_connection 系统变量定义。

COLLATE 子句可以用于指定字符表达式的字符集和字符序,语法如下:

[_charset_name]'string' [COLLATE collation_name]

示例如下:

SELECT _utf8mb4'abc' COLLATE utf8mb4_unicode_ci;
+------------------------------------------+
| _utf8mb4'abc' COLLATE utf8mb4_unicode_ci |
+------------------------------------------+
| abc |
+------------------------------------------+
1 row in set (0.001 sec)

在指定 SQL 中常量的字符集时,对于 gb18030_2022,在十六进制数前添加 _gb18030_2022 可以将该编码转换为 gb18030_2022 下的相应字符。在字符串前添加 _gb18030_2022 可以指定该字符串的字符集为 gb18030_2022

SELECT _gb18030_2022 0xCDE5 AS c FROM DUAL;
+-----+
| c |
+-----+
| 湾 |
+-----+
1 row in set (0.001 sec)

SELECT _gb18030_2022 '湾' AS c FROM DUAL;
+-----+
| c |
+-----+
| 婀 |
+-----+
1 row in set, 1 warning (0.000 sec)

选择字符表达式的字符集和字符序

seekdb 通过以下方式选择字符表达式的字符集和字符序:

  • 如果同时指定了 _charset_nameCOLLATE collation_name,则使用字符集 charset_name 和字符序collation_name

  • 如果指定了 _charset_name 但未指定 COLLATE,则使用字符集 charset_name 及其默认字符序。要查看每个字符集的默认字符序,请使用 SHOW CHARACTER SET 语句。

  • 如果未指定 _charset_name 但指定了 COLLATE collation_name,则使用由 character_set_connection 系统变量和 collation collation_name 指定的默认字符集。collation_name 必须是默认字符集支持的字符序。

  • 如果既不指定 CHARACTER SET 也不指定 COLLATE,则使用由 character_set_connection 系统变量和 collation collation_name 指定的默认字符集。