Mysql – Can’t change charset in MySQL 5.7 (from latin to utf8)

MySQL

I installed MySQL 5.7.8 on my Ubuntu 14.04.

But I can't modify MySQL default charset. I want to change charset to utf8.

I've searched and view many articles on the internet, but every method that I tried don't apply for me.

I already add 'character-set-server=utf8' and 'collation-server=utf8_general_ci' in /etc/mysql/my.cnf. but it's not working…

How can I change my charset of MySQL? Please answer to me!

  • Status in MySQL

    Connection:             Localhost via UNIX socket
    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:            /var/run/mysqld/mysqld.sock
    Uptime:                 1 min 24 sec
    
  • show variables like 'c%'

    | 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/ |
    | check_proxy_users        | OFF                        |
    | collation_connection     | utf8_general_ci            |
    | collation_database       | latin1_swedish_ci          |
    | collation_server         | latin1_swedish_ci          |
    | completion_type          | NO_CHAIN                   |
    | concurrent_insert        | AUTO                       |
    | connect_timeout          | 10                         |
    | core_file                | OFF                        |
    
  • my.cnf (in /etc/mysql)

    [mysqld]
    #
    # * Basic Settings
    #
    character-set-server=utf8
    collation-server=utf8_general_ci
    user            = mysql
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    port            = 3306
    basedir         = /usr
    datadir         = /var/lib/mysql
    tmpdir          = /tmp
    lc-messages-dir = /usr/share/mysql
    skip-external-locking
    character-set-server=utf8
    collation-server=utf8_general_ci
    init_connect=set collation_connection=utf8_general_ci
    init_connect=set names utf8
    character-set-client-handshake=FALSE
    

Best Answer

  • Setting UTF-8 character set and collation for the MySQL server:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

Then press i and add the following:

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

Press Esc then :w then :q!

Then restart the server:

sudo /etc/init.d/mysql restart

Check your configuration:

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/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql> show variables like "%collation%";


+----------------------+-----------------+
| 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)
  • Setting UTF-8 character set and collation for the database and tables:

Specify it explicitly when creating the database:

CREATE DATABASE some_database CHARACTER SET utf8 COLLATE utf8_general_ci;

Check your configuration:

mysql> SHOW CREATE DATABASE ... 
mysql> SHOW CREATE TABLE ... 
Related Topic