鶏口牛後な日々

心の赴くまま、やりたいことを仕事に。

MySQLで文字コードを直す時のmy.cnfの書き方

確認方法

show variables like 'chara%';

これで、今現在の文字コードがどうなっているか確認できる。 f:id:TACOSVilledge:20181026173113p:plain

文字コードは、サーバー、データベース、カラムといったそれぞれの単位で設定できる。 デフォルトの文字コードを変える場合、 /etc/my.cnf に設定を書き込むことで、mysql全体の設定を指定することができる。

この時、設定に書いた一文はこんな感じ。

character-set-database = utf8mb4

この時、少なくとも、 _ (アンダースコア)は、ダメっぽかったので、 - (ハイフン)に変えておいた。 ただ、この時の書き方がうまくいかないと、設定書き込み後にmysqlを再起動しようとした時にエラーが出てしまう。

エラー内容は、 /var/log/mysqld.log に書き込まれる。 中を確認すると、

[ERROR] unknown variable 'character-set-database=utf8mb4'

こんな感じのエラーが出ていた。

show variables like 'chara%'; で表示される書き方と同じように書いちゃダメなようですね。

書き方は、

[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8

だそうです。

その他、ちゃんと入れておいたほうがいいらしいmy.cnfの設定

default_password_lifetime = 0
 

# Time zone
log-timestamps = system

 

# TIMESTAMP
explicit_defaults_for_timestamp = true

timestampについては、ちょっとあまり理解できていないのだが、 updated_at とか、 created_at といった、自動でtimestampを入れてくれるようなカラムを用意している場合に、入れておかないと、Laraveのマイグレーション実行コマンド php artisan migrate をやった時に、エラーがでまくりました。 エラー文言に、 timestampを入れるカラム名が入ってくる場合、気をつけたほうが良さそうです。

なにやら、Mysqlディストリビューションでは、5.6か5.7あたりから新しく設定に書き込まないと動かない、という項目になってきているようで、頭の片隅においておく必要がありそうです。

参考記事:

fedora15 mysql5.5 default-character-setが原因で起動できない - ITとともに生きよう