【PHP初心者向け】MAMPでMySQLの文字コードを設定する方法(文字化け対策)【Mac】

東京のすみっこより愛をこめて。fummyです😊💡

PHPの入門書として評価の高い『いきなりはじめるPHP』をやったのですが、その中でデータベース(MySQL)の文字化け対策のために、文字コードを設定する箇所があります。(pp.107-108)

わたしはPHPの開発環境はMAMPを使っているので、MAMPでMySQLの文字コードの設定を行う方法について、ネットで検索して調べてたのですが、情報が断片的で、、、苦労しました。

なので、本記事では、MAMPでMySQLの文字コードの設定を行う方法について、ネットの情報を総合して試行錯誤した結果、最終的にうまくいった内容を書き残しておきたいと思います。

コピペでもできるように、詳しく書いたつもりですので、初心者の方も参考にしていただければ嬉しいです✨

ちなみに、『いきなりはじめるPHP』が気になる方は、こちらで紹介していますので、参照ください!

SPONSORED LINK

開発環境

参考に、わたしの今回の開発環境について、記載しておきます。マシンはMacbook Proです。

開発環境
  • PHP: 7.1.8
  • MySQL: 5.6.35
  • MAMP: Ver4.2

MAMP、PHP、MySQL、現段階での最新Verを使用しています。

SPONSORED LINK

データベース(MySQL)の文字化け対策の具体的手順

ここから本題に入ります。データベースの文字化けを防ぐために、MySQLに文字コードを設定していきます。具体的にやることとしては、以下です。

MySQLへの文字コード設定方法
  1. ”my.cnf”という設定ファイルに文字コード(今回は”UTF-8″)を正しく設定する。
  2. my.cnfをMAMP内の然るべき場所に格納する。

MAMPを使った開発環境なので、データベース(MySQL)はMAMP内にあります。そのため、設定ファイル(my.cnf)はMAMP内に格納することになります。

しかし問題なのが、MAMPにはmy.cnfというファイルがデフォルトでは存在しないため、ユーザが作成し、適切な場所を探して格納する必要があります。その手順を以下に説明していきます。

また、ターミナルを使った設定方法を説明しますので、難しく感じる方は、コピペでやってみてください!

手順1:MySQLの現在の文字コードの設定を確認する。

まず一番はじめに行うべきは現状把握。ユーザーが特に何もしなくても、MySQLには初期値として、何らかの設定がされています。MySQLにどのような文字コードが設定されているのか、確認します。

(1) ターミナルを起動する。

ターミナルという黒い画面を起動します。

ターミナルの起動方法
  1. commandキー + スペースキー   → Spotlightを起動する。
  2. “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ファイルを格納すればよいことがわかります。

MySQLが参照する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]と記載されている箇所に、以下のような設定を追記し、保存してください。

[mysqld]

skip-character-set-client-handshake
character-set-server = utf8
init-connect = SET NAMES utf8
collation-server = utf8_general_ci

これで、MAMPのMySQLに文字コードを設定する作業は終わりです。お疲れさまでした!

SPONSORED LINK

まとめ・補足

MAMP, PHP, MySQL, 文字化け対策

『いきなりはじめるPHP』の読者も想定しているので、補足というか注意点を書かせてください。

『いきなりはじめるPHP』では、Mac版はmy.cnfの[client]と[mysqld]と[mysql]の3箇所に追記するよう指示が書かれています。(同書、p.108)

しかし、MAMPでは[mysqld]の1箇所のみで大丈夫です。
むしろ、[client]と[mysql]に設定を追加したら、mysqlのコマンド実行時にエラーが発生しましたので、[mysqld]以外は設定を追加してはいけません。ご注意くださいませ。

それでは、今日も素敵な一日を!

fummy

SPONSORED LINK
SPONSORED LINK