どこぞのエンジニアなマネージャーのブログ。

Perlとかviとかcssとかjavascriptとか(rubyとか)git >> https://github.com/rozary hatenaIDがrozrayなのはtypo

DBから引っ張ってきた値が文字化ける!!

開発で使っていたソースを、いざ本番サーバーにアップ!!
という作業をしていたら何故か文字化けする!

ソースは変えていない…開発と本番差異はなんだろうと。

  • フレームワークバージョン揃えた
  • テンプレートエンジンバージョン揃えた
  • ORマッパバージョン揃えた
  • DBIバージョン揃えた
  • DBD::mysqlバージョン揃えた

もうDBかな?と

で、文字だから文字コードの確認

mysql> show variables like 'char%'; 
開発 本番
character_set_database latin1 utf-8
character_set_server latin1 utf-8

「コーコダー!ナオセー!!」

ということで、これが原因です。

これを変更するには、my.cnfを編集します。

だので、my.cnfの場所を探しましょう。

> mysql --help | grep my.cnf 
> /etc/my.cnf /etc/mysql/my.cnf 

という感じで、my.cnfを読み込む順番が表示されます。
この読み込み順で読み込まれますので、前にあるのは後ろにあるmy.cnfで上書きされていきます。
ご注意ください。

で、それをどうするか。

  1. その順でファイルを探して開いてください。
  2. 今回は本番を開発に合わせるので latin1にします。

(普通ならutf8に合わせたほうがいいと思います。)

[mysqld]
character_set_server = latin1

3. character_set_serverを変更すると、character_set_databaseも変更されています。

これで、my.cnfを閉じて、mysqlをリスタートしてください。

mysql> show variables like 'char%'; 

をして期待通りになっていることを確認。
文字化けが直りました。

以上。

なんか、何度もコレに突っかかってる気がする…。