• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 配置应用程序字符集和校验规则

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

    • 指定每个数据库的字符设置。例如,使用一个数据库的应用程序可能使用默认值utf8mb4,而使用另一个数据库的应用程序可能使用默认值sjis
    • 在服务器启动时指定字符设置。这将导致服务器将给定的设置用于所有未进行其他安排的应用程序。
    • 如果您从源代码构建MySQL,请在配置时指定字符设置。这使服务器将给定的设置用作所有应用程序的默认设置,而不必在服务器启动时指定它们。

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

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

    此处显示的示例假定在特定上下文中使用latin1字符集和latin1_swedish_ci校验规则来替代utf8mb4and 的默认设置utf8mb4_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'

      有关配置客户端连接的更多信息,请参见“连接字符集和校验规则”。

      注意

      如果ALTER DATABASE用于更改数据库默认字符集或校验规则,则必须删除并重新创建使用这些默认值的数据库中现有的存储例程,以便它们使用新的默认值。(在存储的例程中,如果未明确指定字符集或校验规则,则具有字符数据类型的变量将使用数据库默认值。请参见“ 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_ADMINSUPER特权的用户执行该值。

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

      cmake . -DDEFAULT_CHARSET=latin1 \
        -DDEFAULT_COLLATION=latin1_swedish_ci
      

      生成的服务器使用latin1latin1_swedish_ci作为数据库和表以及客户端连接的默认值。无需在服务器启动时使用--character-set-server--collation-server指定这些默认值。应用程序SET NAMES连接到服务器后,也不必使用或等效配置它们的连接。

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

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