ロリポップのphpMyAdminでMySQLの文字化けを修正する方法

ロリポップのphpMyAdminでMySQLの文字化けを修正する方法

こんにちは。ネットショップコンサルタントの「たぶ」(@yusuke_tanaka34)です。

今日は『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』をご紹介していこうと思います!

今回の記事は、

  • ロリポップのサーバーを使っている方
  • PHPでサーバーと接続しようと思っている方
  • PHPの勉強を始めたばかりの方

におすすめです!

先日、PHPの勉強をしていた時に、こんな事態に遭遇しました。

たぶ
PHPでロリポップのサーバーにデータを送ったら、日本語が文字化けしているんですけど…(泣)

そうなんです。PHPで簡単な掲示板を作って、ロリポップのサーバーにデータを送信したら、日本語が文字化けしてしまったんです。

MAMPを使ったローカル環境では、文字化けせずにうまくいっていたのですが、ロリポップのサーバーで実際に接続してみたところ、日本語が文字化けしてしまったんですよね…

いろいろ調べまくって、解決するまでに半日ぐらいかかりました。

なので、この記事を読んでいただいてるあなたには、もっと楽にMySQLの文字化けを解決して欲しいと思っています。

この記事に書いてある『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』を読めば、PHPで書いたプログラムの文字化けを解消できちゃいます!

結論から先に言ってしまうと、データベースと接続するコードを書いた後に、文字コードをセットするコードを記述します。

そんなに難しくないので、ぜひサクッと文字化けを修正しちゃってください!

それでは、実際に『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』を詳しく解説していきたいと思います。




ロリポップのphpMyAdminでMySQLの文字化けした流れ

PHPで簡易掲示板のプログラムを作り、サーバーに接続しようと思いました。

その時、作成した簡易掲示板のPHP部分がこちら。

<?php
  //データベース情報の読み込み
  require_once("data/db_info.php");

  //データベースへの接続
  $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);
?>

データベース情報は「data」ディレクトリの「db_info.php」にこのような形で入れました。

<?php
  $SERV = "サーバーのアドレス";
  $USER = "ユーザー名";
  $PASS = "パスワード";
  $DBNM = "データベース名";
?>

入力フォームはこのような形で作りました。

<form method="GET" action="board.php">
<input type="text" name="board" size="50">
<div><input type="submit" value="作成"></div>
</form>

スレッドの名前を作成すると、作成日時とIPアドレスがデータベースに入るように設定しています。

ここでスレッドを作成すると、日本語の部分が「あいあい」のように文字化けしたんですよ。

スレッドを作成すると日本語が文字化け

いやいや、読めないですやん!(笑)

ちなみに、phpMyAdminでデータベース内を見てみても、文字化けしていました。

phpMyAdminでデータベース内を見ても文字化け

文字化けしていると掲示板として機能しないので、文字化けを修正しようと思います。

いろいろ試行錯誤してみたので、その修正方法をご紹介していきますね。

ロリポップのphpMyAdminでMySQLが文字化けする原因

ロリポップのphpMyAdminでMySQLが文字化けする原因

「PHP」はサーバーサイド(サーバー側)で動くプログラミング言語。

Webブラウザから送信したデータを、PHPがサーバー側で処理し、結果をWebブラウザに返して表示されます。

PHPの処理の仕組み

たとえば、「お問い合わせフォーム」があったとします。

名前・メールアドレス・お問い合わせ内容を入力フォームに打ち込み、「送信ボタン」を押すと入力した内容がサーバーに送信されます。

送信されてきたデータをサーバーが処理し、Webブラウザへ送信します。

サーバーから送信されてきた結果が、Webブラウザに表示されるという流れです。

送信したデータが文字化けする原因は、「サーバーとプログラムの文字コードが一致していないこと」

たとえば、プログラムの文字コードが「UTF-8」だった場合、サーバー側の文字コードも「UTF-8」である必要があります。

もしどちらかの文字コードが別の値だった場合、先ほどの「あいあい」のように文字化けしてしまいます。

だいたい文字化けが起こる原因は、この「プログラムとサーバーの文字コードの不一致」です。

それでは、ロリポップのphpMyAdminでMySQLの文字化けを修正する方法を見てきましょう。




PHPの文字コードの設定を確認する

PHPの文字コードの設定を確認する

PHPが動くかどうかは、サーバーにPHPがインストールされているかどうかで決まります。

だいたいのレンタルサーバーにはPHPがインストールされていると思います。

ロリポップの場合は、「ご利用料金」のページでPHPの利用可否を確認することができます。

【ご利用料金|ロリポップ】
https://lolipop.jp/pricing/

PHPが動くことが確認できたら、PHPで書いたプログラムの任意の場所(body内)に、

<?php phpinfo(); ?>

と入力します。

【入力例】

phpinfoの入力例

このコードは「PHPの設定情報を確認するためのコード」です。

上記のコードをプログラム内に書き込みWebブラウザで表示すると、このように表示されます。

PHPのバージョン情報

ここで確認する項目は、

  1. mbstring.language
  2. mbstring.internal_encoding
  3. mbstring.encoding_translation

の3つ。

PHPの設定情報で確認する項目

ここが、

項目
mbstring.languageJapanese
mbstring.internal_encodingUTF-8
mbstring.encoding_translationOff

になっていれば大丈夫です。

もし違う場合は、上記の設定に変更します。

画像では項目の値が違うので、修正します。

ちなみに、上記の項目は、

項目意味
mbstring.languagePHPで使う言語の初期値
mbstring.internal_encoding文字エンコーディングする初期値
mbstring.encoding_translation送られてきたデータの文字エンコーディングを検出し変換するかどうか

という意味です。

次に、サーバー側の文字コードの設定を確認してみましょう。

サーバーの文字コードの設定を確認する

サーバーの文字コードの設定を確認する

PHP側の文字コードの設定が確認できたら、次はサーバー側の文字コードの設定を確認します。

1.まず、ロリポップの管理画面にログインします。

ロリポップの管理画面にログイン

【ロリポップのログイン画面】
https://user.lolipop.jp/

2.ロリポップの管理画面が表示されました。

ロリポップの管理画面

3.左メニューの「サーバーの管理・設定」をクリックします。

左メニューの「サーバーの管理・設定」をクリック

4.ドロップダウンメニューが表示されるので、「データベース」をクリックします。

ドロップダウンメニューが表示されるので「データベース」をクリック

5.「データベース」のページが表示されました。

「データベース」のページが表示

6.使用するデータベースの「操作する」ボタンをクリックします。

使用するデータベースの「操作する」ボタンをクリック

7.個別のデータベース情報が表示されました。

個別のデータベース情報が表示

8.「phpMyAdminを開く」ボタンをクリックします。

「phpMyAdminを開く」ボタンをクリック

9.phpMyAdminのログイン画面が開きました。

phpMyAdminのログイン画面

10.ログイン情報を入力し、「続行」ボタンをクリックします。

ログイン情報を入力し「続行」ボタンをクリック

ログイン情報は、7番の個別のデータベース情報に記載されている項目を入力します。

11.phpMyAdminにログインしました。

phpMyAdminにログイン

まず、phpMyAdminのトップページで3つの項目を確認します。

  1. 「一般設定」の「サーバー接続の照合順序」
  2. 「外観の設定」の「言語 – Langage」
  3. 「データベースサーバ」の「サーバの文字セット」

1つずつ確認していきますね。

12.「一般設定」の「サーバー接続の照合順序」が「utf8_general_ci」になっているか確認します。

「一般設定」の「サーバー接続の照合順序」が「utf8_general_ci」になっているか確認

13.「外観の設定」の「言語 – Langage」が「日本語 – Japanaese」になっているか確認します。

「外観の設定」の「言語 - Langage」が「日本語 - Japanaese」になっているか確認

ちなみに、これはphpMyAdminの表示設定ですが、念のためです、念のため…

14.「データベースサーバ」の「サーバの文字セット」が「UTF-8 Unicode(utf8)になっているか確認します。

「データベースサーバ」の「サーバの文字セット」が「UTF-8 Unicode(utf8)になっているか確認

15.問題なければ、上部メニューの「SQL」ボタンをクリックします。

問題なければ上部メニューの「SQL」ボタンをクリック

16.「SQL」の入力画面が表示されます。

「SQL」の入力画面が表示

「SQL」の入力欄に、以下の文字を入力します。

show variables like "chara%";

17.入力したら、「実行」ボタンをクリックします。

入力したら「実行」ボタンをクリック

ちなみに入力した文字(クエリ)は、「MySQLの文字コードの設定を表示する。」という意味です。

ちなみに「クエリ」とは、「データベースにデータの問い合わせや要求をすること」を言います。

18.MySQLの文字コードの設定が表示されました。

MySQLの文字コードの設定が表示

19.設定されているMySQLの文字コードはこんな感じ。

設定されているMySQLの文字コード

以下と同じ値になっているか確認してみてください。

Variable_nameValue
character_set_clientutf8
character_set_connectionutf8
character_set_databaseutf8
character_set_filesystembinary
character_set_resultsutf8
character_set_serverutf8
character_set_systemutf8
character_sets_dir文字セットのファイルが入っているディレクトリ

データベースの設定で、「latin1」「EUC-JP」という文字コードが入っている場合があるので、注意です!

「ディレクトリ」とは、パソコンで言うところの「フォルダ」のこと。サーバーでは「ディレクトリ」と呼びます。

ちなみに、各項目の意味はこんな感じ。

Variable_nameValue
character_set_clientブラウザから送信したSQL文の文字コード。
character_set_connectionブラウザから送信された文字コードを変換する文字コード。
character_set_databaseデータベースで使用されている文字コード。
character_set_filesystemファイルシステムの文字コード。「binary」の場合は、変換しないという意味。
character_set_results指示した結果やエラーメッセージをブラウザに送るための文字コード。
character_set_serverサーバーの初期値の文字コード
character_set_system識別子を保管するためにサーバーで使用されている文字コード。常に「utf8」。
character_sets_dir文字コードのファイルが入っているディレクトリの場所

データベースの文字コードの設定を確認する

サーバーの文字コードの設定が大丈夫であれば、データベースの文字コードの設定も大丈夫だと思いますが、念のため確認しておきましょう。

1.phpMyAdminの左側にある使用するデータベース名をクリックします。

phpMyAdminの左側にある使用するデータベース名をクリック

2.データベースのカラム構造が表示されました。

データベースのカラム構造が表示

「カラム」とは、データを入れる箱のようなもののこと。

ここでその「カラム」の設定を確認することができます。

3.各カラムの「照合順序」が「utf8_general_ci」になっているか確認します。

各カラムの「照合順序」が「utf8_general_ci」になっているか確認

ちなみに、この「照合順序」とは、「データに入っている文字の識別を行うための基準」のことを言います。

データベースでは、入っているデータをソート(並べ替えること)することが頻繁にあります。

その時に、基準となる法則が「照合順序」です。

たとえば、「あ」と「ア」と「ア」だったら、どういう順番で並ぶかという法則が決められています。

ちなみに、MySQLの初期値は「utf8_general_ci」です。

4.「照合順序」に問題がなければ、上部メニューの「SQL」ボタンをクリックします。

「照合順序」に問題がなければ上部メニューの「SQL」ボタンをクリック

5.「SQL」を入力する画面が表示されました。

「SQL」を入力する画面が表示

先ほどと同じ、以下のクエリを入力します。

show variables like "chara%";

「クエリ」とは「データベースにデータの問い合わせや要求をすること」のことを言います。

ここで入力したクエリは、「MySQLの文字コードの設定を表示する。」という指示です。

6.クエリを入力したら、「実行」ボタンをクリックします。

クエリを入力したら「実行」ボタンをクリック

7.データベースの文字コードの設定が表示されました。

データベースの文字コードの設定が表示

以下の値と同じになっていれば問題ありません。

Variable_nameValue
character_set_clientutf8
character_set_connectionutf8
character_set_databaseutf8
character_set_filesystembinary
character_set_resultsutf8
character_set_serverutf8
character_set_systemutf8
character_sets_dir文字セットのファイルが入っているディレクトリ

各項目の意味は上記に記載しているので、興味のある方は上にスクロールしてご覧ください。

ちなみに「ディレクトリ」とは、パソコンで言うところの「フォルダ」のことを言います。

以上、「サーバーの文字コードの設定を確認する方法」でした。




ロリポップのphpMyAdminでMySQLの文字化けを修正する方法

ロリポップのphpMyAdminでMySQLの文字化けを修正する方法

それでは、「ロリポップのphpMyAdminでMySQLの文字化けを修正する方法」を解説していきたいと思います。

「ロリポップのphpMyAdminでMySQLの文字化けを修正する方法」は、以下の3つ。

  1. ロリポップの管理画面からphp.iniの設定を変更する
  2. PHPプログラムに打ち込んでPHPの設定を変更する
  3. 「.htaceess」でPHPの設定を変更する

それでは、「ロリポップのphpMyAdminでMySQLの文字化けを修正する」3つの方法を解説していきますね。

ロリポップの管理画面からphp.iniの設定を変更する

それではまず、一番簡単な「ロリポップの管理画面からphp.iniの設定を変更する」方法を解説していきます。

1.先ほどと同様、ロリポップの管理画面にログインします。

ロリポップの管理画面にログインします

【ロリポップのログイン画面】
https://user.lolipop.jp/

2.ロリポップの管理画面が表示されます。

ロリポップの管理画面が表示されます

3.左メニューにある「サーバーの管理・設定」をクリックします。

左メニューにある「サーバーの管理・設定」をクリックします

4.ドロップダウンメニューの「PHP設定」をクリックします。

ドロップダウンメニューの「PHP設定」をクリック

5.「PHP設定」のページが表示されました。

「PHP設定」のページが表示

6.使用しているドメインの「php.ini」にある「設定」ボタンをクリックします。

使用しているドメインの「php.ini」にある「設定」ボタンをクリック

7.「php.ini設定」のページが表示されました。

「php.ini設定」のページが表示

8.「mbstring関連」の各項目を下記の値に変更します。

「mbstring関連」の各項目を下記の値に変更
設定項目設定内容
mbstring.languageJapanese
mbstring.internal_encodingUTF-8
mbstring.encoding_translationOff

9.また、念のため「そのほか」の「default_charset」も確認してください。

念のため「そのほか」の「default_charset」も確認

値が「UTF-8」ではない場合、「UTF-8」に変更してください。

設定項目設定内容
default_charsetUTF-8

以上で、「ロリポップの管理画面からphp.iniの設定を変更する」は終了です。

お疲れ様でした。

PHPプログラムに打ち込んでPHPの設定を変更する

次に、「PHPプログラムに打ち込んでPHPの設定を変更する」方法を解説していきますね。

上記の「ロリポップのphpMyAdminでMySQLの文字化けした流れ」に掲載した「PHP部分」に、文字コードを指定するコードを記述します。

記述するコードは、

  mysqli_set_charset('utf8');

このコードを、「データベースの接続」の下に記述してください。

  //データベースへの接続
  $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);
  mysqli_set_charset('utf8');

この記述で、文字コードを指定しています。

これをやってみて文字化けが治らなかったら、こちらのコードを記述してみてください。

  mysqli_set_charset($db, "utf8");

打ち込むとこんな感じ。

  //データベースへの接続
  $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);
  mysqli_set_charset($db, "utf8");

これで文字化けが治っているはず!

ちなみに、こちらのコードはPHP7に対応できるように「mysqli関数」を使用しています。

PHP5までだと「mysql関数」を使用することが多いです。

もしも上記のコードでダメだった場合は、最終手段です!

下記のコードを挿入します。

$enc = 'utf8';
$db->query(" set character_set_client = {$enc};");
$db->query(" set character_set_connection = {$enc};");
$db->query(" set character_set_database = {$enc};");
$db->query(" set character_set_results = {$enc};");
$db->query(" set character_set_server = {$enc};");
$db->query(" set character_set_system = {$enc};");

打ち込むとこんな感じ。

  //データベースへの接続、データベース選択
  $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);

  $enc = 'utf8';
  $db->query("set character_set_client = {$enc};");
  $db->query("set character_set_connection = {$enc};");
  $db->query("set character_set_database = {$enc};");
  $db->query("set character_set_results = {$enc};");
  $db->query("set character_set_server = {$enc};");
  $db->query("set character_set_system = {$enc};");

この方法では、データベースの設定自体を変更するのではなく、今回の処理で使う文字コードを指定しています。

僕の場合は、だいたいこの方法で、文字化けが修正できました。

レンタルサーバーでは、MySQLを直接いじったり、設定ファイルを書き換えたりすることができない場合が多いので、今回のようにPHPプログラムへの記述で修正します。

「.htaceess」でPHPの設定を変更する

最後に、「.htaceess」でPHPの設定を変更する方法について解説していきます。

『「.htaceess」ってなに?』という場合は、こちらの記事をご覧ください。

EC-CUBEに入っている「.htaccess」の書き方とは

EC-CUBEに入っている「.htaccess」の書き方とは

2018年7月8日
EC-CUBEに入っている「.htaccess」とは

EC-CUBEに入っている「.htaccess」とは

2018年7月6日

基本的には、上記の2つの方法で文字化けが直るはずです。

もし、どうしても直らない場合は、こちらの方法も試してみてください。

「.htaccess」は記述ミス等があると、Webサイトが表示されなくなります。

まずは「.htaccess」のバックアップを取ってから作業を行いましょう。

もしWebサイトが表示されなくなっても、「.htaccess」を元のファイルに戻せば表示されるようになりますので、焦らずに対処しましょう。

それでは、下記のコードを「.htaccess」に貼り付けて、サーバーにアップロードします。

php_value mbstring.language "Japanese"
php_value mbstring.internal_encoding "UTF-8"
php_flag mbstring.encoding_translation off
php_value default_charset "UTF-8"

この方法は、「.htaccess」から文字コードを指定する方法です。

簡単な方法ではありますが、Webサイトが表示されなくなる可能性もありますので、まずは上記の2つの方法を試してみましょう。

以上、3つが「ロリポップのphpMyAdminでMySQLの文字化けを修正する方法」でした!




まとめ

今回は『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』というテーマでお送りしてきました。

ロリポップのphpMyAdminでMySQLの文字化けする原因は、

サーバーとプログラムの文字コードが一致していないこと

でした。

ロリポップのphpMyAdminでMySQLが文字化けしたら、まずは

  1. PHPの文字コードの設定を確認する
  2. サーバーの文字コードの設定を確認する

をしてみましょう。

もしPHPやサーバーの文字コードの設定が「UTF-8」になっていなかったら、

  1. ロリポップの管理画面からphp.iniの設定を変更する
  2. PHPプログラムに打ち込んでPHPの設定を変更する
  3. 「.htaceess」でPHPの設定を変更する

の3種類の方法で修正します。

以上が『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』でした。

PHPやMySQLについて、他にも分からないことがありましたら、こちらの記事もおすすめです。

Javaでコンパイルエラーの文字化けを修正する方法【Macの場合】

Javaでコンパイルエラーの文字化けを修正する方法【Macの場合】

2019年9月16日
第1階層がリンクではないドロップダウンメニューを作る方法

第1階層がリンクではないドロップダウンメニューを作る方法

2018年12月20日
スムーススクロールが「トップへ戻る」だけ効かない時の修正方法

スムーススクロールが「トップへ戻る」だけ効かない時の修正方法

2018年10月20日
グローバルナビなど横並びにしたリスト要素が段々にずれる現象を直す方法【CSS】

グローバルナビなど横並びにしたリスト要素が段々にずれる現象を直す方法【CSS】

2018年10月17日

【プログラミングならTechAcademy】


【どこでも受けられるTECH::CAMP】


ABOUTこの記事をかいた人

通称:たぶ
30代中頃、東京都在住。
ネットショップコンサルタント。
EC-CUBE、ASP、ショッピングモールなど各種ネットショップでの売上UPが得意。
アパレル系のネットショップの売上を4倍に増やし、月商900万円、年商1億円を達成。
ネットショップ運営の数なら誰にも負けません。
最近、ポメラニアンが気になる。
炊きたての白米が何もよりも好き。