[MySQL]文字コードの設定を変更してutf8で統一する

mysql_logo

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

MySQL の文字コードの調整

最近AWSやAzureなどのクラウドサービスが普及しています。その中で久しぶりにウェブサーバー内にデータベースをインストールして、直接 MySQL の設定ファイルにて文字コードを調整したので手順を記載します。

 

MySQL5.7 の設定変更

準備した環境としては、
開発環境:AWS
OS:Ubuntu 18.04
データベース:MySQL 5.7
となります。

初期の文字コードは下記の通り、文字コードが latin1 のものがあるため utf8 に変更していきます。

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| 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)

 

Ubuntu18.04 の仕様なのかは分かりませんが、alternatives によって my.cnf が管理されています。

root@localhost:/etc/mysql# ls -la
total 32
drwxr-xr-x  4 root root 4096 Nov 26 10:32 .
drwxr-xr-x 93 root root 4096 Nov 26 10:32 ..
drwxr-xr-x  2 root root 4096 Nov 26 10:32 conf.d
-rwxr-xr-x  1 root root  120 Oct 23 04:33 debian-start
-rw-------  1 root root  317 Nov 26 10:32 debian.cnf
lrwxrwxrwx  1 root root   24 Nov 26 10:32 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r--  1 root root  839 Aug  3  2016 my.cnf.fallback
-rw-r--r--  1 root root  682 Jan 12  2018 mysql.cnf
drwxr-xr-x  2 root root 4096 Nov 26 10:32 mysql.conf.d

 

my.cnf の構成が変わって、my.cnf に設定を直接記述しない形式に変更されています。設定する項目によって、「/etc/mysql/conf.d/」と「/etc/mysql/mysql.conf.d/」にそれぞれ分けて設定ファイルを設置、または編集する仕様みたいです。

root@localhost:/etc/mysql# cat my.cnf
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

 

[mysqld]に1行追加するだけなので、「/etc/mysql/mysql.conf.d/mysqld.cnf」の末尾に追加します。
追加する内容

[mysqld] …
#末尾に追加するだけ
character-set-server=utf8

追加したファイルの抜粋

root@localhost:/etc/mysql/mysql.conf.d# cat mysqld.cnf
#
# The MySQL database server configuration file.
#

(省略)

[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]

(省略)

character-set-server=utf8

 

後はMySQLの再起動コマンド「service mysql restart」を実行して、文字コードを確認したところ対応完了となります。

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)

 

さいごに

個人的にはデータベースは、AWS の RDS を利用することが多くなり、my.cnf の触り方を忘れがちです。みなさんは文字コードの調整は必ず忘れそいように十分にご注意ください。

一旦間違ったデータベースで運用すると「mysqldump」で出力、データベースの組み直し、「mysql」のリストアを行う必要があり大変面倒なので(笑)。