概要
MySQLデータベースを使用している際、特に日本語などの非ASCII文字を扱う場合、文字化けが発生することがあります。これは、クライアントやデータベースサーバの文字セット設定が一致していないことが原因です。このガイドでは、MySQLで日本語が正しく表示されない問題を解決するための具体的な手順を紹介します。
問題の原因
通常、MySQLではクライアントとサーバーが異なる文字セットを使用していると、データのやり取り時に文字化けが発生します。MySQLで文字セットが latin1 になっていると、日本語の文字が正しく表示されず、クエリの結果が「???」のように表示されることがあります。
解決方法
以下の手順に従って、MySQLで日本語が正しく表示されるように設定を変更します。
手順 1: クライアント文字セットの確認
まず、現在の文字セット設定を確認します。MySQLのコマンドラインで以下のコマンドを実行します。
SHOW VARIABLES LIKE 'character_set%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
このように character_set_client や character_set_results が latin1 になっている場合、クライアント側での文字セットが原因で日本語が正しく表示されていない可能性があります。
手順 2: クライアント文字セットの変更
クライアント側の文字セットを utf8mb4 に設定します。MySQLクライアント内で以下のコマンドを実行します。
SET NAMES 'utf8mb4';
このコマンドにより、クライアント側の文字セットが utf8mb4 に変更されます。
手順 3: 設定変更が反映されているか確認
設定が正しく反映されているか確認するため、再度文字セット設定を確認します。
SHOW VARIABLES LIKE 'character_set%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
character_set_client、character_set_connection、character_set_results がすべて utf8mb4 になっていれば、設定は正しく変更されています。
手順 4: データの再確認
最後に、データベース内の日本語が正しく表示されるか確認します。例えば、department テーブルのデータを確認します。
SELECT * FROM department;
+--------------+----------------+---------+
| DEPARTMENTNO | DEPARTMENTNAME | ADDRESS |
+--------------+----------------+---------+
| 10 | 総務課 | 長野県 |
| 20 | 営業課 | 新潟県 |
| 30 | 人事課 | 東京都 |
| 40 | 開発課 | 東京都 |
+--------------+----------------+---------+
日本語のデータが正しく表示されていれば、問題は解決です。