MySQLで文字化け?解決策は?

Webサイトやアプリケーションの開発運用時に突然文字が「??」や記号に変わってしまう「文字化け」に遭遇したことはありませんか?

その時に「UPDATE」を実行すると治ったりするという経験がある方はいるかと思います。

今回は、その問題の根本となる部分で可能性があるものに対しての対処方法です。

文字化けはなぜ起きるのか

DBは文字を「文字コード」に従って管理をしています。
DBにはこの設定を行うことができるのですが、設定がされていないと、データの読み書き時に文字コードの変換がうまくいかず、文字化けが発生してしまうことがあります。

文字コード確認

このような文字化けが発生したら文字コードを確認してみましょう。

以下のSQL文を実行すると、現在の文字コード設定を確認できます。

SHOW VARIABLES LIKE 'chara%';

この結果で確認したいポイントは3つ

  • character_set_client
    クライアントから MySQL サーバーに送信されるデータの文字コード
  • character_set_connection
    サーバーがクライアントから受け取った文字列データを内部処理用の文字コードに変換する際に使用される文字コード
  • character_set_results
    サーバーからクライアントに結果を送信する時に使用される文字コード

これらの値が意図したものと違った場合、また、それぞれ別のものになってしまっていた場合変更が必要になります。

設定方法

設定の仕方としては複数ありますが、大抵の場合、DBのベースの設定を変更するのが良いでしょう。

MySQLをインストールして使用する場合は、initファイルがありますので、そこに設定します。
AWSなどのクラウドの設定を行う場合には、パラメーター設定の部分にあるので確認して下さい。

設定するパラメーター

default-character-set="[文字コード]"

また、この文字コードはデータベースやテーブルを作成する際にも指定ができるのでその際に、チグハグな状況を作らないようにしましょう。

CREATE DATABASE mydb CHARACTER SET "[文字コード]" COLLATE "[文字コード]";

CREATE TABLE mytable (
    [カラム定義],
) CHARACTER SET "[文字コード]" COLLATE "[文字コード]";

最後に

設定をしたからと言って完全に解消されるわけではありません。
アプリケーションなどで設定している文字コードが間違っている場合にも同様の事象が発生することがありますので、確認をしながら設定を行って下さい。