Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  Character Sets, Collations, Unicode  /  Configuring Application Character Set and Collation

12.5 应用程序字符集和排序配置

对于使用默认 MySQL 字符集和排序(utf8mb4utf8mb4_0900_ai_ci)存储数据的应用程序,不需要特殊配置。如果应用程序需要使用不同的字符集或排序,可以通过多种方式配置字符集信息:

  • 按数据库指定字符设置。例如,使用一个数据库的应用程序可能使用默认的 utf8mb4,而使用另一个数据库的应用程序可能使用 sjis

  • 在服务器启动时指定字符设置。这将导致服务器为所有不进行其他安排的应用程序使用给定的设置。

  • 在配置时指定字符设置,如果从源代码构建 MySQL。这将导致服务器使用给定的设置作为所有应用程序的默认设置,而不需要在服务器启动时指定。

当不同的应用程序需要不同的字符设置时,按数据库技术提供了很大的灵活性。如果大多数或所有应用程序使用相同的字符集,那么在服务器启动时或配置时指定字符设置可能是最方便的。

对于按数据库或服务器启动技术,设置控制数据存储的字符集。应用程序还必须告诉服务器使用哪种字符集进行客户端/服务器通信,如下所述。

这里显示的示例假设在特定上下文中使用 latin1 字符集和 latin1_swedish_ci 排序作为默认的 utf8mb4utf8mb4_0900_ai_ci 的替代。

  • 按数据库指定字符设置  要创建一个数据库,使其表使用给定的默认字符集和排序来存储数据,请使用以下 CREATE DATABASE 语句:

    CREATE DATABASE mydb
      CHARACTER SET latin1
      COLLATE latin1_swedish_ci;

    在数据库中创建的表将使用 latin1latin1_swedish_ci 作为字符列的默认设置。

    使用该数据库的应用程序还应该在每次连接时配置其连接到服务器。这可以通过执行 SET NAMES 'latin1' 语句来实现,无论连接方法是什么(mysql 客户端、PHP 脚本等)。

    在某些情况下,可能可以通过其他方式配置连接以使用所需的字符集。例如,要使用 mysql 连接,可以指定 --default-character-set=latin1 命令行选项以达到与 SET NAMES 'latin1' 相同的效果。

    有关配置客户端连接的更多信息,请参阅 第 12.4 节,“连接字符集和排序规则”

    Note

    如果您使用 ALTER DATABASE 更改数据库的默认字符集或排序规则,则数据库中使用这些默认值的现有存储例程必须被删除并重新创建,以便使用新的默认值。(在存储例程中,字符数据类型的变量将使用数据库的默认值,除非明确指定字符集或排序规则。请参阅 第 15.1.17 节,“CREATE PROCEDURE 和 CREATE FUNCTION 语句”。)

  • 在服务器启动时指定字符设置。 要在服务器启动时选择字符集和排序规则,请使用 --character-set-server--collation-server 选项。例如,要在选项文件中指定这些选项,请包括以下行:

    [mysqld]
    character-set-server=latin1
    collation-server=latin1_swedish_ci

    这些设置将应用于整个服务器,并作为任何应用程序创建的数据库的默认值,以及这些数据库中的表的默认值。

    应用程序仍需要使用 SET NAMES 或等效语句在连接后配置连接,如前所述。您可能想使用 --init_connect="SET NAMES 'latin1'" 选项来自动执行 SET NAMES 语句 для每个连接的客户端。然而,这可能会产生不一致的结果,因为 init_connect 值不会为具有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)的用户执行。

  • 在 MySQL 配置时指定字符设置。 如果您从源代码配置和构建 MySQL,要选择字符集和排序规则,请使用 DEFAULT_CHARSETDEFAULT_COLLATION CMake 选项:

    cmake . -DDEFAULT_CHARSET=latin1 \
      -DDEFAULT_COLLATION=latin1_swedish_ci

    生成的服务器使用 latin1latin1_swedish_ci 作为数据库、表和客户端连接的默认设置。不需要在服务器启动时使用 --character-set-server--collation-server 指定这些默认值。此外,应用程序也不需要在连接到服务器后使用 SET NAMES 或等效命令来配置连接。

无论您如何配置 MySQL 字符集以供应用程序使用,您还必须考虑这些应用程序执行的环境。例如,如果您计划从编辑器创建的文件中发送 UTF-8 文本语句,那么您应该将环境的 locale 设置为 UTF-8,以便文件编码正确并且操作系统正确地处理它。如果您在终端窗口中使用 mysql 客户端,那么窗口必须配置为使用 UTF-8,否则字符可能无法正确显示。在 Web 环境中执行的脚本必须正确地处理字符编码,以便与 MySQL 服务器交互,并且必须生成正确地指示编码的页面,以便浏览器知道如何显示页面内容。例如,您可以在 <head> 元素中包含以下 <meta> 标签:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />