【MariaDB・備忘】文字コードが揃ってなくて文字化けがひどい

スポンサーリンク
広告

ひどいも何も、文字化けしてるかしてないかは二択ですが・・・。

これに大変苦しめられたので、備忘で記しておきます。

 

まず、文字化けしてる! ことが発覚したら、文字コードを確認します。

 

show variables like "chara%";

これで、どこがutf8じゃないか? を確認します。

(だいたい、Latinとかになってるようです)

 

f:id:TACOSVilledge:20170226195104p:plain

こんな感じ。

MariaDBでは、サーバー、データベース、テーブル、カラムなどにそれぞれ文字コードを設定できるのだそうな。

 

それぞれを、設定ファイル(iniやcnf)で指定することもできるそうだが、

簡単なのは、コマンドで変える方ですよね。

 

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

データベースの文字コードを設定するときの方法を以下に記しておきます。

データベースを作った後だと、alter文で変えることもできるようです。

ですが、create databaseするときに

create database データベース名 default character set = utf8;

 

で設定できるようです。

また先ほどの、show variables like "chara%"で確認しましょう。

 

サーバーの文字コードを変えたい場合

また、serverの文字コードを変えたい場合は、

 

mysql > set character_set_server = utf8;

 

の一文で変わる。

 

全部一気に変えたい場合

そもそも最初から設定に書き込んでおく手もある。

まず、mysql --helpを打つ。これはmysql関連のコマンドのマニュアルを示してくれるコマンドであるが、これを打つと、途中に、configurationファイルのpathを示してくれる行が含まれている。

 

Default options are read from the following files in the given order:

/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

 

 こんな感じ。

前から順に読んでいくよ、といっているので、/etc/my.cnf に書くと良いだろう。

これらのファイルは、管理者権限でないと編集できない。

sudo vim /etc/my.cnf

とでもする。

 

[mysql] と書くと、クライアントごとの設定として読み込んでくれる。

[mysqld] と書くと、サーバー側の設定として読み込む。

基本は以下のような感じ。

 

-----

 

[mysqld]
# Password life time

#default_password_lifetime = 0

 

# Time zone

log-timestamps = system

 

# TIMESTAMP

explicit_defaults_for_timestamp = true

 

# utf8mb4

character-set-server = utf8mb4

collation-server = utf8mb4_general_ci

innodb_file_per_table = 1

 

# LONGTEXT

max_allowed_packet = 1GB

innodb_log_buffer_size = 512MB

innodb_log_file_size = 2GB

-----

 

青く色付けたところが、文字コードの設定。

utf8mb4というのは、昨今の絵文字のような4byte文字に対応できないということで新しくできた文字コード

もともとalphabetだけを使っていた国々では、すべての文字が1byteで良かったが、

日本のひらかななどは、2byteや時折3byteの文字もあった。

それが、この頃は、海外でも絵文字利用が進んでおり、どこの国でも2byte, 3byte, 4byte文字に対応できるような文字コードの採用が進んでいるらしい。

 

configurationファイルを編集した後は、mysqlを再起動するのをお忘れなく。

preferenceのmysqlというアプリケーションからstop/restartできる。

これをちゃんとやっておかないと、変えたのに、文字化けが起こり続けるという現象にえらく時間を取られることになる。

 

主に同じことに苦しめられる可能性のある未来の自分への参考まで。

 

 

 以上。