この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
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」のリストアを行う必要があり大変面倒なので(笑)。
