Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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 对于任何字符列。

    使用该数据库的应用程序也应该在每次连接服务器时配置连接。可以通过执行mysql 客户端、PHP 脚本等,使用 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_COLLATIONCMake选项:

    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服务器的交互,并生成页面以便浏览器知道如何显示内容。例如,你可以在元素中包含以下<meta>标签:

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