Change MySQL default character set to UTF-8 in my.cnf?

前端 未结 18 957
一个人的身影
一个人的身影 2020-11-22 01:55

Currently we are using the following commands in PHP to set the character set to UTF-8 in our application.

Since this is a bit of overhead, we\'d like to set this a

相关标签:
18条回答
  • 2020-11-22 02:19

    MySQL v5.5.3 and greater:

    Just add three lines only in the [mysqld] section:

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

    Note: Including skip-character-set-client-handshake here obviates the need to include both init-connect in [mysqld] and default-character-set in the [client] and [mysql] sections.

    0 讨论(0)
  • 2020-11-22 02:19

    MySQL versions and Linux distributions may matter when making configurations.

    However, the changes under [mysqld] section is encouraged.

    I want to give a short explanation of tomazzlender's answer:

    [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]

    This will change collation_connection to utf8_unicode_ci

    init_connect='SET collation_connection = utf8_unicode_ci'
    

    Using SET NAMES:

    init_connect='SET NAMES utf8'
    

    The SET NAMES will influence three characters, that is:

    character_set_client
    character_set_results
    character_set_connection
    

    This will set character_set_database & character_set_server

    character-set-server=utf8
    

    This will only affect collation_database & collation_server

    collation-server=utf8_unicode_ci
    

    Sorry, I'm not so sure what is this for. I don't use it however:

    skip-character-set-client-handshake
    
    0 讨论(0)
  • 2020-11-22 02:19

    If you are confused by your setting for client and conn is reseted after restart mysql service. Try these steps (which worked for me):

    1. vi /etc/my.cnf
    2. add the contents blow and :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
    3. restart mysql and login mysql , use database, input command status;, you'll find the character-set for 'client' and 'conn' is set to 'utf8'.

    Check the reference for more info.

    0 讨论(0)
  • 2020-11-22 02:19

    Change MySQL character:

    Client

    default-character-set=utf8
    

    mysqld

    character_set_server=utf8
    

    We should not write default-character-set=utf8 in mysqld, because that could result in an error like:

    start: Job failed to start

    At last:

     +--------------------------+----------------------------+
     | 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/ |
     +--------------------------+----------------------------+
    
    0 讨论(0)
  • 2020-11-22 02:24

    Under Xubuntu 12.04 I simply added

    [mysqld]
    character_set_server = utf8
    

    to /etc/mysql/my.cnf

    And the result is

    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)
    

    Also take a look at http://dev.mysql.com/doc/refman/5.6/en/charset-server.html

    0 讨论(0)
  • 2020-11-22 02:27

    All settings listed here are correct, but here are the most optimal and sufficient solution:

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

    Add these to /etc/mysql/my.cnf.

    Please note, I choose utf8_unicode_ci type of collation due to the performance issue.

    The result is:

    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 |
    +----------------------+-----------------+
    

    And this is when you connect as non-SUPER user!

    For example, the difference between connection as SUPER and non-SUPER user (of course in case of utf8_unicode_ci collation):

    user with SUPER priv.:

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

    user with non-SUPER priv.:

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

    I wrote a comprehensive article (rus) explaining in details why you should use one or the other option. All types of Character Sets and Collations are considered: for server, for database, for connection, for table and even for column.

    I hope this and the article will help to clarify unclear moments.

    0 讨论(0)
提交回复
热议问题