【问题标题】:Change MySQL default character set to UTF-8 in my.cnf?在 my.cnf 中将 MySQL 默认字符集更改为 UTF-8?
【发布时间】:2011-03-31 15:17:30
【问题描述】:

目前我们在 PHP 中使用以下命令在我们的应用程序中将字符集设置为UTF-8

由于这有点开销,我们想将此设置为 MySQL 中的默认设置。我们可以在 /etc/my.cnf 或其他位置执行此操作吗?

SET NAMES 'utf8'
SET CHARACTER SET utf8

我在 /etc/my.cnf 中寻找了一个默认字符集,但那里没有关于字符集的内容。

此时,我执行以下操作将 MySQL 字符集和排序规则变量设置为 UTF-8:

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8

这是处理这个问题的正确方法吗?

【问题讨论】:

标签: mysql character-encoding


【解决方案1】:

对于 utf8mb4_general_ci

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4
    
[mysqld]
collation-server = utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4

根据https://symfony.com/doc/2.6/book/doctrine.html#configuring-the-database 的 symfony 框架文档

我们建议不要使用 MySQL 的 utf8 字符集,因为它不 支持 4 字节的 unicode 字符,包含它们的字符串将是 截断。这已由较新的 utf8mb4 字符集修复。

【讨论】:

    【解决方案2】:

    要将默认设置为 UTF-8,您需要将以下内容添加到 my.cnf/my.ini

    [client]
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
    
    [mysqld]
    collation-server = utf8mb4_unicode_520_ci
    init-connect='SET NAMES utf8mb4'
    character-set-server = utf8mb4
    

    如果您想更改现有数据库的字符集,请告诉我...您的问题没有直接指定,所以我不确定您是否想要这样做。

    编辑:由于utf8 只是 UTF-8 的子集,我在原始答案中将 utf8 替换为 utf8mb4。 MySQL 和 MariaDB 都调用 UTF-8 utf8mb4

    【讨论】:

    • 上面的 my.cnf 设置也对我有用。此外,我必须确保表设置正确,例如 ALTER TABLE Table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    • 不适用于 mysql 5.5。我使用了:
      [mysqld] # Changes for utf-8 collat​​ion-server = utf8mb4_unicode_ci init-connect='SET NAMES utf8mb4' character-set-server = utf8mb4 and utf8mb4 如上所述。
    • 在 Ubuntu 12.04 上,这对我有用 - 如果我删除了 [mysqld] 之后的第一行。
    • 在 [mysqld] 部分中似乎不再允许使用默认字符集
    • 请注意,如果您想要 UTF-8,请不要使用 MySQL 的 utf8 字符集。 Use utf8mb4 instead.
    【解决方案3】:

    注意: my.cnf 文件位于/etc/mysql/

    添加这些行后:

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
    skip-character-set-client-handshake
    
    [client]
    default-character-set   = utf8
    
    [mysql]
    default-character-set   = utf8
    

    别忘了重启服务器:

    sudo service mysql restart
    

    【讨论】:

    • 注意:这会改变默认值;它确实更改任何现有列的编码。
    【解决方案4】:

    你可以按照它的方式来做,如果不行就需要重启mysql。

    【讨论】:

      【解决方案5】:

      在 Fedora 21 上

      $ vi /etc/my.cnf
      

      添加关注:

      [client]
      default-character-set=utf8
      
      [mysql]
      default-character-set=utf8
      
      [mysqld]
      init_connect='SET collation_connection = utf8_unicode_ci'
      init_connect='SET NAMES utf8'
      character-set-server=utf8
      collation-server=utf8_unicode_ci 
      skip-character-set-client-handshake
      

      保存并退出。

      最后记得用service mysqld restart重启服务mysqld。

      【讨论】:

        【解决方案6】:

        MySQL v5.5.3 及更高版本:

        只需在 [mysqld] 部分添加三行即可:

        [mysqld]
        character-set-server = utf8
        collation-server = utf8_unicode_ci
        skip-character-set-client-handshake
        

        注意:在此处包含skip-character-set-client-handshake 无需在[mysqld] 中包含init-connect,在[client][mysql] 部分中包含default-character-set

        【讨论】:

        • 哇,这个问题有这么多重复的答案,但这似乎是最简单的一个。在 v5.5.44 上也适用于我。
        【解决方案7】:

        如果您对客户端的设置感到困惑,并且在重新启动 mysql 服务后会重置 conn。尝试以下步骤(对我有用):

        1. vi /etc/my.cnf
        2. 添加内容一击和:wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
        3. 重启mysql并登录mysql,使用数据库,输入命令status;,你会发现'client'的字符集和'conn'设置为'utf8'。

        查看reference 了解更多信息。

        【讨论】:

          【解决方案8】:

          在进行配置时,MySQL 版本和 Linux 发行版可能很重要。

          但是,鼓励在[mysqld] 部分下进行更改。

          我想对tomazzlender的回答做一个简短的解释:

          [mysqld] 
          init_connect='SET collation_connection = utf8_unicode_ci' 
          init_connect='SET NAMES utf8' 
          character-set-server=utf8 
          collation-server=utf8_unicode_ci 
          skip-character-set-client-handshake
          

          [mysqld]

          这会将 collat​​ion_connection 更改为 utf8_unicode_ci

          init_connect='SET collation_connection = utf8_unicode_ci'
          

          使用SET NAMES

          init_connect='SET NAMES utf8'
          

          SET NAMES 会影响三个字符,即:

          character_set_client
          character_set_results
          character_set_connection
          

          这将设置character_set_database & character_set_server

          character-set-server=utf8
          

          这只会影响 collat​​ion_database 和 collat​​ion_server

          collation-server=utf8_unicode_ci
          

          抱歉,我不太确定这是干什么用的。但是我不使用它:

          skip-character-set-client-handshake
          

          【讨论】:

          • documentation 说明character_set_server 不应手动设置。
          • 那么最先进的方法是什么?我们可以在建立数据库连接时显式传递character set,但是看起来有点烦。
          • 其实我搞错了。文档说 character_set_database 不应该动态设置。没有提到 character_set_server。但是,我不确定您是否需要担心 character_set_server,因为我认为它只会影响新创建的数据库的默认值?
          • 如前所述,我刚才又做了一次实验,[mysqld]部分中的character_set_server会影响character_set_databasecharacter_set_server。现在我认为一个好的做法是在创建数据库、表和数据库连接时明确指出要使用的character set。老实说,mysql 的文档不是那么容易理解的。你知道是否有一种通用的方法可以在 mysql 中完成所有 character setcollation 设置?
          【解决方案9】:

          更改 MySQL 字符:

          客户

          default-character-set=utf8
          

          mysqld

          character_set_server=utf8
          

          我们不应该在 mysqld 中写入default-character-set=utf8,因为这可能会导致如下错误:

          启动:作业启动失败

          最后:

           +--------------------------+----------------------------+
           | Variable_name            | Value                      |
           +--------------------------+----------------------------+
           | character_set_client     | utf8                       |
           | character_set_connection | utf8                       |
           | character_set_database   | utf8                       |
           | character_set_filesystem | binary                     |
           | character_set_results    | utf8                       |
           | character_set_server     | utf8                       |
           | character_set_system     | utf8                       |
           | character_sets_dir       | /usr/share/mysql/charsets/ |
           +--------------------------+----------------------------+
          

          【讨论】:

            【解决方案10】:

            对于最新版本的 MySQL,

            default-character-set = utf8
            

            导致问题。我认为它已被弃用。

            正如Justin Ball 在“Upgrade to MySQL 5.5.12 and now MySQL won’t start”中所说,您应该:

            1. 删除该指令,你应该会很好。

            2. 那么你的配置文件(例如'/etc/my.cnf')应该是这样的:

              [mysqld]
              collation-server = utf8_unicode_ci
              init-connect='SET NAMES utf8'
              character-set-server = utf8
              
            3. 重启 MySQL。

            4. 为确保您的 MySQL 是 UTF-8,请在您的 MySQL 提示符中运行以下查询:

              • 第一个查询:

                 mysql> show variables like 'char%';
                

                输出应如下所示:

                 +--------------------------+---------------------------------+
                 | Variable_name            | Value                           |
                 +--------------------------+---------------------------------+
                 | character_set_client     | utf8                            |
                 | character_set_connection | utf8                            |
                 | character_set_database   | utf8                            |
                 | character_set_filesystem | binary                          |
                 | character_set_results    | utf8                            |
                 | character_set_server     | utf8                            |
                 | character_set_system     | utf8                            |
                 | character_sets_dir       | /usr/local/mysql/share/charsets/|
                 +--------------------------+---------------------------------+
                
              • 第二次查询:

                 mysql> show variables like 'collation%';
                

                查询输出为:

                 +----------------------+-----------------+
                 | Variable_name        | Value           |
                 +----------------------+-----------------+
                 | collation_connection | utf8_general_ci |
                 | collation_database   | utf8_unicode_ci |
                 | collation_server     | utf8_unicode_ci |
                 +----------------------+-----------------+
                

            【讨论】:

            • 您的第一行 max_allowed_pa​​cket=64M 是否与此 UTF8 问题有任何关系?
            • 我有character_set_filesystem | utf8。我不确定,可以吗?
            • 在 MariaDB v5.5 上试用过,它可以工作,谢谢! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
            • 我认为你不需要删除default-character-set,而是可以改为loose-default-character-set = utf8——即前缀为'loose-'。这让mysqlbinlog 很高兴,如果你需要使用它 — google for: "loose-default-character-set" mysqlbinlog
            • init-connect='SET NAMES utf8' 真的有必要吗?如果没有,我们绝对可以不用它来提高性能。
            【解决方案11】:

            我还发现,在[mysqld]标题下设置default-character-set = utf8后,MySQL 5.5.x将无法在Ubuntu 12.04下启动(Precise Pangolin)。

            【讨论】:

            • 那是MySQL bug #52047。在[mysqld] 下,您应该使用character-set-server 而不是default-character-set。 (非常令人困惑,我同意!)
            • 是的。在 5.0 中已弃用;在 5.5 中删除。
            【解决方案12】:

            这个问题已经有很多答案了,但是 Mathias Bynens 提到应该使用 'utf8mb4' 而不是 'utf8' 以获得更好的 UTF-8 支持('utf8' 不支持 4 字节字符,字段是truncated on insert)。我认为这是一个重要的区别。所以这里是关于如何设置默认字符集和排序规则的另一个答案。一个可以让你插入一堆便便(?)。

            这适用于 MySQL 5.5.35。

            请注意,某些设置可能是可选的。由于我不能完全确定我没有忘记任何东西,因此我会将这个答案设为社区 wiki。

            旧设置

            mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
            +--------------------------+----------------------------+
            | Variable_name            | Value                      |
            +--------------------------+----------------------------+
            | character_set_client     | utf8                       |
            | character_set_connection | utf8                       |
            | character_set_database   | latin1                     |
            | character_set_filesystem | binary                     |
            | character_set_results    | utf8                       |
            | character_set_server     | latin1                     |
            | character_set_system     | utf8                       |
            | character_sets_dir       | /usr/share/mysql/charsets/ |
            +--------------------------+----------------------------+
            8 rows in set (0.00 sec)
            
            +----------------------+-------------------+
            | Variable_name        | Value             |
            +----------------------+-------------------+
            | collation_connection | utf8_general_ci   |
            | collation_database   | latin1_swedish_ci |
            | collation_server     | latin1_swedish_ci |
            +----------------------+-------------------+
            3 rows in set (0.00 sec)
            

            配置

            # ? ?
            # UTF-8 should be used instead of Latin1. Obviously.
            # NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
            
            [client]
            default-character-set = utf8mb4
            
            [mysqld]
            character-set-server = utf8mb4
            collation-server = utf8mb4_unicode_ci
            
            [mysql]
            default-character-set = utf8mb4
            

            新设置

            mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
            +--------------------------+----------------------------+
            | Variable_name            | Value                      |
            +--------------------------+----------------------------+
            | character_set_client     | utf8mb4                    |
            | character_set_connection | utf8mb4                    |
            | character_set_database   | utf8mb4                    |
            | character_set_filesystem | binary                     |
            | character_set_results    | utf8mb4                    |
            | character_set_server     | utf8mb4                    |
            | character_set_system     | utf8                       |
            | character_sets_dir       | /usr/share/mysql/charsets/ |
            +--------------------------+----------------------------+
            8 rows in set (0.00 sec)
            
            +----------------------+--------------------+
            | Variable_name        | Value              |
            +----------------------+--------------------+
            | collation_connection | utf8mb4_general_ci |
            | collation_database   | utf8mb4_unicode_ci |
            | collation_server     | utf8mb4_unicode_ci |
            +----------------------+--------------------+
            3 rows in set (0.00 sec)
            

            character_set_system is always utf8.

            这不会影响现有表,它只是默认设置(用于新表)。 以下ALTER code 可用于转换现有表(无需转储恢复解决方法):

            ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
            ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
            

            编辑:

            在 MySQL 5.0 服务器上:character_set_client、character_set_connection、character_set_results、collat​​ion_connection 保持在 latin1。发出SET NAMES utf8(utf8mb4 在该版本中不可用)也会将它们设置为 utf8。


            警告: 如果您有一个带有 VARCHAR(255) 类型索引列的 utf8 表,则在某些情况下无法转换它,因为超过了最大键长度 (Specified key was too long; max key length is 767 bytes.)。如果可能,将列大小从 255 减少到 191(因为 191 * 4 = 764

            【讨论】:

            • 我按照你的设置,但我发现character_set_database 仍然是utf8collation_database 是utf8_bin`。我错过了什么吗?
            • 找到了我错过的东西。这两个设置是在创建数据库本身时设置的。看到这个问题; stackoverflow.com/questions/22572558/…
            • character-set-client-handshake = FALSE添加到[mysqld]部分,所以即使你在应用层出错,它也将始终使用默认编码
            • 嗨我已经尝试过这个解决方案,但我仍然无法显示 character_set_client | utf8mb4.这是utf8。只是 character_set_database utf8mb4 和 character_set_server utf8mb4 是 utf8mb4 其他没有改变。请帮帮我
            • @baic6 我建议添加注释,说明为什么只有索引列会导致问题。 767 字节的限制仅适用于索引列,因为“键”的限制。对于一般的非索引列,这不适用。如果列具有最大字节长度的值,例如 255 个字符并且使用了 utf8 的最大 3 个字节,它仍然只需要 255*3 个字节,在这些情况下 utf8mb4 将只使用 3 个字节,因为 utf8mb4 中的这些字符也只需要 3 个字节。也就是说,除非将不适合 utf8 的字符存储到列中,否则信息已经丢失。
            【解决方案13】:

            如果您在使用 MySQL Workbench 确认客户端的字符集支持时遇到问题,请记住以下注意事项:

            重要 MySQL Workbench 打开的所有连接都自动设置客户端字符 设置为 utf8。手动更改客户端字符集,例如使用 SET NAMES ...,可能会导致 MySQL Workbench 无法正确显示字符。为了 有关客户端字符集的其他信息,请参阅连接字符集 和排序规则。

            因此,我无法用 my.cnf 更改覆盖 MySQL Workbench 的字符集。例如'设置名称 utf8mb4'

            【讨论】:

              【解决方案14】:

              MySQL 5.5,你只需要:

              [mysqld]
              character_set_client=utf8
              character_set_server=utf8
              collation_server=utf8_unicode_ci
              

              collation_server 是可选的。

              mysql> show variables like 'char%';
              +--------------------------+----------------------------+
              | Variable_name            | Value                      |
              +--------------------------+----------------------------+
              | character_set_client     | utf8                       |
              | character_set_connection | utf8                       |
              | character_set_database   | utf8                       |
              | character_set_filesystem | binary                     |
              | character_set_results    | utf8                       |
              | character_set_server     | utf8                       |
              | character_set_system     | utf8                       |
              | character_sets_dir       | /usr/share/mysql/charsets/ |
              +--------------------------+----------------------------+
              8 rows in set (0.00 sec)
              

              【讨论】:

                【解决方案15】:

                这里列出的所有设置都是正确的,但这里是最优化和最充分的解决方案:

                [mysqld]
                init_connect='SET collation_connection = utf8_unicode_ci'
                character-set-server = utf8
                collation-server = utf8_unicode_ci
                
                [client]
                default-character-set = utf8
                

                将这些添加到/etc/mysql/my.cnf

                请注意,由于性能问题,我选择 utf8_unicode_ci 类型的排序规则。

                结果是:

                mysql> SHOW VARIABLES LIKE 'character%';
                +--------------------------+----------------------------+
                | Variable_name            | Value                      |
                +--------------------------+----------------------------+
                | character_set_client     | utf8                       |
                | character_set_connection | utf8                       |
                | character_set_database   | utf8                       |
                | character_set_filesystem | binary                     |
                | character_set_results    | utf8                       |
                | character_set_server     | utf8                       |
                | character_set_system     | utf8                       |
                | character_sets_dir       | /usr/share/mysql/charsets/ |
                +--------------------------+----------------------------+
                
                mysql> SHOW VARIABLES LIKE 'collation%';
                +----------------------+-----------------+
                | Variable_name        | Value           |
                +----------------------+-----------------+
                | collation_connection | utf8_unicode_ci |
                | collation_database   | utf8_unicode_ci |
                | collation_server     | utf8_unicode_ci |
                +----------------------+-----------------+
                

                这是当您以非超级用户的身份连接时!

                例如,作为 SUPER 和非 SUPER 用户连接的区别(当然是在 utf8_unicode_ci 排序的情况下):

                拥有 SUPER 权限的用户:

                mysql> SHOW VARIABLES LIKE 'collation%';
                +----------------------+-----------------+
                | Variable_name        | Value           |
                +----------------------+-----------------+
                | collation_connection | utf8_general_ci | <---
                | collation_database   | utf8_unicode_ci |
                | collation_server     | utf8_unicode_ci |
                +----------------------+-----------------+
                

                拥有非超级权限的用户:

                mysql> SHOW VARIABLES LIKE 'collation%';
                +----------------------+-----------------+
                | Variable_name        | Value           |
                +----------------------+-----------------+
                | collation_connection | utf8_unicode_ci |
                | collation_database   | utf8_unicode_ci |
                | collation_server     | utf8_unicode_ci |
                +----------------------+-----------------+
                

                我写了一个comprehensive article (rus) 详细解释了为什么你应该使用一个或另一个选项。所有类型的 Character SetsCollat​​ions 都会被考虑:用于服务器、用于数据库、用于连接、用于表甚至用于列。

                我希望这篇文章和这篇文章能帮助澄清不清楚的时刻。

                【讨论】:

                • 我希望我能阅读您的链接文章,但无法阅读俄语,而且谷歌翻译对技术文本没有多大帮助。据我所知,这将非常有趣。你能考虑发布一个英文版本吗?
                • 您能解释一下哪个设置无法设置超级用户连接排序规则吗? (有没有解决办法)
                • @gahcep,你说你使用utf8_unicode_ci是因为性能问题,那么,为什么不改用utf8_bin呢?
                • 嗨,帕赛亚尔。好点子。现在我不确定我对使用utf8_unicode_ci 的选择是否正确。从未花时间测试性能。
                【解决方案16】:

                Xubuntu 12.04下我简单添加

                [mysqld]
                character_set_server = utf8
                

                到/etc/mysql/my.cnf

                结果是

                mysql> show variables like "%character%";show variables like "%collation%";
                +--------------------------+----------------------------+
                | Variable_name            | Value                      |
                +--------------------------+----------------------------+
                | character_set_client     | utf8                       |
                | character_set_connection | utf8                       |
                | character_set_database   | utf8                       |
                | character_set_filesystem | binary                     |
                | character_set_results    | utf8                       |
                | character_set_server     | utf8                       |
                | character_set_system     | utf8                       |
                | character_sets_dir       | /usr/share/mysql/charsets/ |
                +--------------------------+----------------------------+
                8 rows in set (0.00 sec)
                
                +----------------------+-----------------+
                | Variable_name        | Value           |
                +----------------------+-----------------+
                | collation_connection | utf8_general_ci |
                | collation_database   | utf8_general_ci |
                | collation_server     | utf8_general_ci |
                +----------------------+-----------------+
                3 rows in set (0.00 sec)
                

                也可以看看http://dev.mysql.com/doc/refman/5.6/en/charset-server.html

                【讨论】:

                • 您还需要 [client]default-character-set=utf8 否则当您在命令行中使用 mysql 时,它不会使用 utf8 可能会破坏您通过管道传输到文件的任何备份。
                【解决方案17】:

                在 MySQL 5.5 上,我的 my.cnf 中有

                [mysqld] 
                init_connect='SET collation_connection = utf8_unicode_ci' 
                init_connect='SET NAMES utf8' 
                character-set-server=utf8 
                collation-server=utf8_unicode_ci 
                skip-character-set-client-handshake
                

                结果是

                mysql> show variables like "%character%";show variables like "%collation%";
                
                +--------------------------+----------------------------+
                | Variable_name            | Value                      |
                +--------------------------+----------------------------+
                | character_set_client     | utf8                       |
                | character_set_connection | utf8                       |
                | character_set_database   | utf8                       |
                | character_set_filesystem | binary                     |
                | character_set_results    | utf8                       |
                | character_set_server     | utf8                       |
                | character_set_system     | utf8                       |
                | character_sets_dir       | /usr/share/mysql/charsets/ |
                +--------------------------+----------------------------+
                8 rows in set (0.00 sec)
                
                +----------------------+-----------------+
                | Variable_name        | Value           |
                +----------------------+-----------------+
                | collation_connection | utf8_unicode_ci |
                | collation_database   | utf8_unicode_ci |
                | collation_server     | utf8_unicode_ci |
                +----------------------+-----------------+
                3 rows in set (0.00 sec)
                

                【讨论】:

                • skip-character-set-client-handshake 究竟是做什么的,在什么情况下需要它?
                • @Simon,在使用show variables like "%collation%"; 时,我看到'collat​​ion_connection' 为utf8_general_ci,而collat​​ion_database 和collat​​ion_server 为utf8_unicode_ci。添加行 skip-character-set-client-handshake 将一般条目更改为 unicode,因此所有三个都是一致的。
                • 在 MySQL 5.6 上,skip-character-set-client-handshake 不会像@Vaughany 所说的那样做。有什么建议吗?
                • skip-character-set-client-handshake 为我做了这件事(当然还有“字符集服务器”和“排序服务器”——在 Debian 7 上)。 init_connects 在有或没有 skip 的情况下都没有区别,而且似乎是多余的。 +1,谢谢。
                • skip-character-set-client-handshake 忽略客户端发送的字符集信息。在通信过程中强制使用特定的字符集很好,但如果客户期待其他东西,它可能会导致问题。我会说你最好在客户端(你的应用程序)上指定它。
                【解决方案18】:

                NijaCat 很接近,但指定过度杀伤:

                要将默认设置为 UTF-8,您需要将以下内容添加到 my.cnf

                [client]
                default-character-set=utf8
                
                [mysqld]
                default-character-set = utf8
                

                然后,验证:

                mysql> show variables like "%character%";show variables like "%collation%";
                
                +--------------------------+----------------------------+
                | Variable_name            | Value                      |
                +--------------------------+----------------------------+
                | character_set_client     | utf8                       |
                | character_set_connection | utf8                       |
                | character_set_database   | utf8                       |
                | character_set_filesystem | binary                     |
                | character_set_results    | utf8                       |
                | character_set_server     | utf8                       |
                | character_set_system     | utf8                       |
                | character_sets_dir       | /usr/share/mysql/charsets/ |
                +--------------------------+----------------------------+
                8 rows in set (0.00 sec)
                
                +----------------------+-----------------+
                | Variable_name        | Value           |
                +----------------------+-----------------+
                | collation_connection | utf8_general_ci |
                | collation_database   | utf8_general_ci |
                | collation_server     | utf8_general_ci |
                +----------------------+-----------------+
                3 rows in set (0.00 sec)
                

                【讨论】:

                • 不错的答案。也许对哪些部分过大的简短解释可以帮助人们准确地确定他们想要的配置。
                • @Derek,那[mysql] default-character-set=utf8 做了什么?
                • [client] 选项组已经为所有读取 my.cnf 文件的 MySQL 客户端设置了选项。 [mysql] 组专门为“mysql”客户端二进制文件设置选项。如果要设置一个不适用于其他客户端的 mysql 选项,使用该组是合适的,但在两个位置设置相同的选项值是多余的。 dev.mysql.com/doc/refman/5.6/en/option-files.html
                • @Mike Samuel,将默认字符集设置为 utf8 已经暗示了 utf8_general_ci 的默认排序模式。另一方面,“init-connect='SET NAMES utf8'” 是一个有点有趣的想法,因为它试图强制所有连接到服务器的客户端使用 utf8,但这取决于连接的连接权限用户和我怀疑当服务器覆盖他们请求的字符集时,一些连接的第三方客户端可能会感到困惑。 dev.mysql.com/doc/refman/5.6/en/charset-applications.html
                • 对于[mysqld] 使用character-set-server 而不是default-character-set
                【解决方案19】:

                指令已更改为character-set-system=utf8

                http://dev.mysql.com/doc/refman/5.6/en/charset-configuration.html

                【讨论】:

                  猜你喜欢
                  • 2014-03-22
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-09-29
                  • 2011-06-05
                  • 2012-01-30
                  • 1970-01-01
                  • 2019-07-31
                  • 2011-09-05
                  相关资源
                  最近更新 更多