MySQL 8.0 参考手册  / 第 10 章字符集、排序规则、Unicode  /  10.5 配置应用程序字符集和排序规则

10.5 配置应用程序字符集和排序规则

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

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

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

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

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

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

此处显示的示例假定在特定上下文中使用utf8 字符集和排序规则作为默认值和 utf8_general_ci的替代方法 。 latin1latin1_swedish_ci

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

    CREATE DATABASE mydb
      CHARACTER SET utf8
      COLLATE utf8_general_ci;

    在数据库中创建的表默认使用utf8utf8_general_ci任何字符列。

    使用数据库的应用程序还应该在每次连接时配置它们与服务器的连接。这可以通过SET NAMES 'utf8' 在连接后执行一条语句来完成。无论连接方法( mysql 客户端、PHP 脚本等) 如何,都可以使用该语句。

    在某些情况下,可以将连接配置为以其他方式使用所需的字符集。例如,要使用mysql进行连接,您可以指定 --default-character-set=utf8 命令行选项来实现与SET NAMES 'utf8'.

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

    笔记

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

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

    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci

    这些设置在服务器范围内应用,并作为任何应用程序创建的数据库以及在这些数据库中创建的表的默认值应用。

    It is still necessary for applications to configure their connection using SET NAMES or equivalent after they connect, as described previously. You might be tempted to start the server with the --init_connect="SET NAMES 'utf8'" option to cause SET NAMES to be executed automatically for each client that connects. However, this may yield inconsistent results because the init_connect value is not executed for users who have the SUPER privilege.

  • Specify character settings at MySQL configuration time.  To select a character set and collation if you configure and build MySQL from source, use the DEFAULT_CHARSET and DEFAULT_COLLATION CMake options:

    cmake . -DDEFAULT_CHARSET=utf8 \
      -DDEFAULT_COLLATION=utf8_general_ci

    The resulting server uses utf8 and utf8_general_ci as the default for databases and tables and for client connections. It is unnecessary to use --character-set-server and --collation-server to specify those defaults at server startup. It is also unnecessary for applications to configure their connection using SET NAMES or equivalent after they connect to the server.

Regardless of how you configure the MySQL character set for application use, you must also consider the environment within which those applications execute. For example, if you send statements using UTF-8 text taken from a file that you create in an editor, you should edit the file with the locale of your environment set to UTF-8 so that the file encoding is correct and so that the operating system handles it correctly. If you use the mysql从终端窗口中访问客户端,该窗口必须配置为使用 UTF-8,否则字符可能无法正确显示。对于在 Web 环境中执行的脚本,脚本必须正确处理字符编码以与 MySQL 服务器交互,并且它必须生成正确指示编码的页面,以便浏览器知道如何显示页面内容。例如,您可以在您的元素 中包含此<meta>标记 :<head>

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