東京のすみっこより愛をこめて。fummyです😊💡
PHPの入門書として評価の高い『いきなりはじめるPHP』をやったのですが、その中でデータベース(MySQL)の文字化け対策のために、文字コードを設定する箇所があります。(pp.107-108)
谷藤賢一『いきなりはじめるPHP』リックテレコム、2011年、p.107より。
わたしはPHPの開発環境はMAMPを使っているので、MAMPでMySQLの文字コードの設定を行う方法について、ネットで検索して調べたのですが、情報が断片的で、、、苦労しました。
なので、本記事では、
MAMPでMySQLの文字コードの設定を行う方法
について、ネットの情報を総合して試行錯誤した結果、最終的にうまくいった内容を書き残しておきたいと思います。
コピペでもできるように、詳しく書いたつもりですので、初心者の方も参考にしてみてください✨
SPONSORED LINK
開発環境
参考に、わたしの今回の開発環境について、記載しておきます。マシンはMacbook Proです。
これ以外の環境の場合は、動作が異なってくることがありますので、ご了承くださいませ(。>人<。)
- PHP: 7.1.8
- MySQL: 5.6.35
- MAMP: Ver4.2
SPONSORED LINK
データベース(MySQL)の文字化け対策の具体的手順
ここから本題に入ります。データベースの文字化けを防ぐために、MySQLに文字コードを設定していきます。具体的にやることとしては、以下です。
- ”my.cnf”という設定ファイルに文字コード(今回は”UTF-8″)を正しく設定する。
- my.cnfをMAMP内の然るべき場所に格納する。
MAMPを使った開発環境なので、データベース(MySQL)はMAMP内にあります。そのため、設定ファイル(my.cnf)はMAMP内に格納することになります。
しかし問題なのが、MAMPにはmy.cnfというファイルがデフォルトでは存在しないため、ユーザが作成し、適切な場所を探して格納する必要があります。その手順を以下に説明していきます。
また、ターミナルを使った設定方法を説明しますので、難しく感じる方は、コピペでやってみてください!
手順1:MySQLの現在の文字コードの設定を確認する
まず一番はじめに行うべきは現状把握。ユーザーが特に何もしなくても、MySQLには初期値として、何らかの設定がされています。MySQLにどのような文字コードが設定されているのか、確認します。
(1) ターミナルを起動する
ターミナルという黒い画面を起動します。
- commandキー + スペースキー → Spotlightを起動する。
- “terminal.app”と入力してEnter。 → terminal.appを検索して起動する
(2) MAMPのMySQLにアクセスする
ターミナルに以下のコマンドを入力し、MAMPのMySQLにアクセスします。一行ずつ入力し、その都度Enterキーを押します。(コピペOK!)
$ cd /Applications/MAMP/Library/bin/ $ ./mysql -u root -p ;
以下のようにパスワードを求められたら、”root”と入力します。(MAMPのデフォルトのパスワードが”root”のため。)入力したrootは画面に表示されませんが、構わずEnterを押します。
Enter password:
(3) MySQLの文字コードを確認する
以下のように入力してEnterを押すと、MySQLの文字コードが一覧表示されます。
mysql> show variables like 'character_set%';
これで、現在の設定を、一覧表示で見ることができます。
+--------------------------+--------------------------------------------+ | 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 | /Applications/MAMP/Library/share/charsets/ | +--------------------------+--------------------------------------------+
わたしの場合はたまたま全部”UTF-8(utf8)”の設定になっているので、初期設定としては問題ありません。人によっては、”character_set_databas”や”character_set_server”が”latin1″などになっていることがあるようです。
(4) MySQLの文字セット(charset)を修正する
“character_set_filesystem”と”character_sets_dir”を除いて、”utf8″以外の値になっているものがあったら、以下のコマンドで設定を修正してあげましょう。以下は”character_set_server”の値を修正する例ですが、”character_set_server”のところには、修正したい”Variable_name”を入れてください。
mysql> set character_set_server = utf8; Query OK, 0 rows affected (0.00 sec)
(5) MySQLからログアウトする
“exit”と入力することで、MySQLからログアウトすることができます。
mysql> exit Bye
手順2:my.cnfファイルを格納すべき場所を確認する
冒頭でご紹介した本『いきなりはじめるPHP』では、開発環境にXAMPPを使っています。
そのため、/Application/xampp/etc/にmy.cnfというファイルがあり、このファイルに設定を行うことでMySQLの文字化けを防ぐことができると記載されています。
しかし、MAMPにはmy.cnfファイルが存在しない上に、どこにファイルを格納すればmy.cnfが適切に参照されるのかわかりません。
my.cnfを格納すべき場所を調べるには、ターミナルに以下のコマンドを入力してください。
$ ./mysql --help | grep my.cnf
そうすると、以下のように表示されます。
$ ./mysql --help | grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /Applications/MAMP/conf/my.cnf ~/.my.cnf
MySQLは、以下のファイルを以下の順番で参照しているということです。(上位のものが適用される。)今回はMAMPを使用するので、“/Applications/MAMP/conf/”にmy.cnfファイルを格納すればよいことがわかります。
- /etc/my.cnf
- /etc/mysql/my.cnf
- /Applications/MAMP/conf/my.cnf
- ~/.my.cnf
手順3:my.cnfファイルを作成する
MAMPにはmy.cnfファイルは存在しませんが、雛形が用意されているため、それをコピーしてmy.cnfファイルを作成することができます。
以下は、“/Application/MAMP/Library/support-files/”にあるmy-default.cnf(雛形)をコピーして、”/Applications/MAMP/conf/”に”my.cnf”というファイル名にリネームして格納するという意味のコマンドです。
こちらをターミナルに入力してEnterキーを押していただければ、然るべき場所にmy.cnfファイルを作成できます。
$ cp -p /Application/MAMP/Library/support-files/my-default.cnf /Applications/MAMP/conf/my.cnf
現在、ターミナルを開いている状態だと思うので、ターミナルで実施する方法を書きましたが、手動でコピーを実施していただいても構いません。
その場合は、Finderで”/Application/MAMP/Library/support-files/”フォルダを開き、my-default.cnfファイルをコピーして、”/Applications/MAMP/conf/”にペーストしてください。その後、my-default.cnfファイルのファイル名を、”my.cnf”ファイルに変更してください。
手順4:my.cnfファイルを修正する
“/Applications/MAMP/conf/”に格納されたmy.cnfファイルの、[mysqld]と記載されている箇所に、以下のような設定を追記し、保存してください。
skip-character-set-client-handshake
character-set-server = utf8
init-connect = SET NAMES utf8
collation-server = utf8_general_ci
これで、MAMPのMySQLに文字コードを設定する作業は終わりです。
『いきなりはじめるPHP』の読者向けの補足
手順4でmy.cnfファイルに追記をするとき、『いきなりはじめるPHP』では、Mac版はmy.cnfの[client]と[mysqld]と[mysql]の3箇所に追記するよう指示が書かれています。(同書、p.108)
しかし、MAMPで開発を行う場合は、[mysqld]の1箇所のみで大丈夫です。
むしろ、[client]と[mysql]に設定を追加したら、mysqlのコマンド実行時にエラーが発生しましたので、[mysqld]以外は設定を追加してはいけません。ご注意くださいませ。
SPONSORED LINK
おわりに
MAMPでMySQLの文字コードの設定を行う方法をみてきました。
これで無事にデータベースの文字化け対策ができましたね。お疲れさまでした!
ちなみに、ここまでちょこちょこ取り上げた『いきなりはじめるPHP』が気になる方は、以下の記事で紹介していますので、参考にしてみてください(*´꒳`*)
それでは、今日も素敵な一日を!
fummy