jumper

コラム

日本語などマルチバイトへの対応

2018年10月31日
日本語などマルチバイトへの対応

MySQLに限らずデータベースでは文字コードが適切に設定されていることが必要です。文字コードが想定されているものでなければ文字化けをおこしますし、検索も正常な結果になりません。

MySQLの文字コードとUTF8の設定

さっそくMySQLの文字コードの確認と設定についてみてみましょう。

MySQLでは基本、UTF8で運用することが多いです。ここでもUTF8を対象に進めましょう。

まずは現状の文字コードを確認します。my.cnfでどのように設定されているか確認してください。my.cnfで文字コードを設定しているケースもありますが、初期状態であれば何も指定されていません。

指定されていない場合はコマンドを利用して確認します。

show variables like "chara%";

で確認することが可能です。ただ、表示される文字コードは用途別にリストで表示されます。詳細はMySQLのマニュアルをご確認いただくとして、これらがUTF8になっていない場合は、UTF8に変更することになります。

あらためてmy.cnf を開いてください。ここに[mysqld] [client]がありますので、それぞれにUTF8を記載します。

[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
※my.cnfの他の記載は省略しています。

My.cnfを更新したのち、MySQLを再起動します。

service mysqld restart

再起動後に再度文字コードを確認してください。UTF8に変更されていることがわかるはずです。

文字化けに対応する

実は、既にテーブルを作成した後では上記の文字コード設定を行っても文字化けは解消しません。

例えば、

show create table テーブル名;

を実行してみると「DEFAULT CHARSET」を確認できます。ここがまだUTF8でなければ文字化けの原因になります。残念ですが、ここからはテーブルのキャラクターセットを各々変更する必要があります。

ALTER DATABASE テーブル名 default character set utf8;

このコマンドでキャラクターセットを変更できます。

再度、

show create table テーブル名;

を実行してキャラクターセットが変更になったことを確認しましょう。

データベースにutf8mb4を設定する

MySQLのUTF8には「utf8」と「utf8mb4」のふたつが存在します。

通常の「utf8」はマルチサイト文字を3バイトで活用しています。またBMP 文字だけをサポートしています。対して「utf8mb4」は4バイトを活用し、補助文字をサポートしています。

「utf8」では補助文字を扱うことができませんので、例えば「絵文字」などは格納することができません。絵文字は4バイトを使っているので、もし絵文字なども扱いたい場合は「utf8mb4」を選択してください。

ただ、MySQLのバージョンによっては「utf8mb4」を避けるべきケースがあります。MySQLのバージョンが5.7.9以前であれば運用を見直した方がよいでしょう。例えば格納するバイト数が1文字3バイトから4バイトになるため、varcharの上限サイズを超えてしまう場合インデックスが張れないということが起きるのです。

なお、「utf8mb4」の設定は上記のmy.cnfへの記述で問題ありません。各テーブルのキャラクターセットの変更も同様です。

まとめ

MySQLで文字化けや検索不一致などの現象がおきる時は、大体文字コードに関係するケースといえます。文字コードはMySQLの初期設定の際に正しく設定しておくべきですが、運用の過程で変更することもあります。一度文字化けしてしまったまま格納すると、後々トラブルの原因になりますので、事前に対応するようにしましょう。

CONTACT

製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。

 050-5505-5509

受付時間 9:30 - 12:00, 13:00 - 17:00
(土日祝および年末年始を除く)