この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
MySQL の文字コードの調整
最近AWSやAzureなどのクラウドサービスが普及しています。その中で久しぶりにウェブサーバー内にデータベースをインストールして、直接 MySQL の設定ファイルにて文字コードを調整したので手順を記載します。
MySQL5.7 の設定変更
準備した環境としては、
開発環境:AWS
OS:Ubuntu 18.04
データベース:MySQL 5.7
となります。
初期の文字コードは下記の通り、文字コードが latin1 のものがあるため utf8 に変更していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 が管理されています。
1 2 3 4 5 6 7 8 9 10 11 |
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/」にそれぞれ分けて設定ファイルを設置、または編集する仕様みたいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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
#末尾に追加するだけ
character-set-server=utf8
追加したファイルの抜粋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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」を実行して、文字コードを確認したところ対応完了となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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」のリストアを行う必要があり大変面倒なので(笑)。