调整实例character_set_server参数和collation_server参数

在数据库迁移、数据库合并时,如果遇到数据库字符集和字符排序规则不兼容的情况,或者配套的应用程序有特殊的字符集和字符排序规则要求,您可以通过调整实例的character_set_server参数和collation_server参数,来修改字符集和字符排序规则,以满足实际需求。

背景信息

character_set_server参数用于设置实例的默认字符集,而collation_server参数用于设置该字符集的排序规则。

同一个字符集可以有多种排序规则。例如,utf8字符集支持utf8_general_ciutf8_bin排序规则,latin1字符集支持latin1_general_cilatin1_bin排序规则。这些排序规则决定了字符的比较和排序方式。

排序规则分为两种类型:基于二进制和基于语言排序。

  • 基于二进制的排序规则(如 utf8_bin)直接比较字符的二进制值,不考虑语言语境和大小写。例如,aA的二进制值不同,因此被视为不同的字符,并按其二进制值排序。这种排序方式速度快,但可能不符合语言习惯。

  • 基于语言的排序规则(如 utf8_general_ci)会考虑字符的语言语境和大小写。例如,aA被视为相等,从而生成符合语言习惯的排序结果。

MySQL中,character_set_servercollation_server是相互关联的,因为排序规则是基于特定字符集的。需要注意的是,只有兼容的字符集和排序规则才能组合使用,不能随意搭配。

说明
  • MySQL中,字符集utf8utf8mb3是别名关系,实际上指向同一个字符集。utf8mb3是为了与utf8mb4区分而引入的别名。从MySQL 5.7开始,建议使用utf8mb4作为默认字符集,因为它支持更多字符。然而,在某些场景下(如与旧代码或数据库兼容),仍需使用utf8utf8mb3

  • 需要注意的是,在character_set_servercollation_server参数中,只能设置utf8,而不支持直接设置utf8mb3

注意事项

character_set_servercollation_server参数仅支持在主实例中修改,只读实例不支持修改。

参数取值规则

  • 当仅修改character_set_server参数时,无论实例当前collation_server参数取值为何值,都会将其设置为character_set_server默认的collation_server取值。例如,将character_set_server配置为utf8时,系统会同时将collation_server的取值改为utf8_general_ci

    说明

    由于字符集utf8utf8mb3是别名关系,因此排序规则utf8_general_ciutf8mb3_general_ci是一样的。当您将character_set_server设置为utf8时,collation_server可能会被修改为utf8mb3_general_ci

  • 当仅修改collation_server参数时,系统会检查该参数取值与当前实例的character_set_server参数取值是否匹配。如果不匹配,则不允许修改collation_server参数。参数匹配关系请参见参数取值

  • 当同时修改character_set_servercollation_server参数时,会检查这两个参数取值的组合是否匹配,如果不匹配,则不允许修改这两个参数。参数匹配关系请参见参数取值

  • character_set_servercollation_server参数的取值只允许参数取值的表格中选择。

重要

当您创建或修改自定义参数模板时:

  • 仅选择character_set_server参数,对应的collation_server会使用默认值。

  • 同时选择character_set_servercollation_server时,需要确保参数组合满足取值规则。

参数取值

参数默认值

MySQL版本

character_set_server

collation_server

MySQL 8.0,MySQL 5.7,MySQL 5.6

utf8

utf8_general_ci

参数匹配关系

重要

内核小版本需满足:

  • MySQL 8.0:20200331及以上。

  • MySQL 5.7:20181226及以上。

  • MySQL 5.6:20221130及以上。

character_set_server

collation_server

是否是默认的collation_server

说明

utf8

utf8_general_ci

MySQL 8.0、5.75.6参数匹配关系相同。

utf8_bin

utf8_unicode_ci

utf8_unicode_520_ci

utf8_general_mysql500_ci

latin1

latin1_swedish_ci

MySQL 8.0、5.75.6参数匹配关系相同。

latin1_bin

latin1_general_ci

latin1_general_cs

gbk

gbk_chinese_ci

MySQL 8.0、5.75.6参数匹配关系相同。

gbk_bin

gb18030

gb18030_chinese_ci

MySQL 8.05.7参数匹配关系相同。MySQL 5.6不支持gb18030。

gb18030_bin

gb18030_unicode_520_ci

utf8mb4

utf8mb4_0900_ai_ci

MySQL 8.0支持,5.75.6不支持。

utf8mb4_0900_as_ci

utf8mb4_0900_as_cs

utf8mb4_0900_bin

utf8mb4_general_ci

  • MySQL 8.0:否

  • MySQL 5.75.6:是

utf8mb4_bin

MySQL 8.0、5.75.6参数匹配关系相同。

utf8mb4_unicode_520_ci

utf8mb4_unicode_ci

参考文档

MySQL官方文档: Character Set Configuration