スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Rails で MySQL に fixture を load すると文字化けする。

【環境】
Ruby: 1.9.3
Rails: 3.2.0
MySQL: 5.5

【0】問題

RailsでSQLite3を使って開発を進め、本番環境に移行しようと、production環境でのデータベースをMySQLに設定しました。

アプリケーションが正常に動作するかどうか確かめるために

$ rake db:fixtures:load RAILS_ENV="product"

して、フィクスチャデータを読み込んでみたところ、読み込み自体には成功したものの、フィクスチャデータ中の日本語がことごとく「?」になるという自体に。


【1】原因

いろいろ調べてみたところ、DBの文字コードに起因する問題っぽいことが判明。

【development】

$ rake db:carset
#=> UTF-8


【production】

$ rake db:carset RAILS_ENV="production"
# => latin1


つまり、SQLite3はUTF-8だが、MySQLはLatin-1で構成されている。

データベースの文字コードをUTF-8にして作成しなおせば解決しそう。


【2】解決法 => MySQLのデフォルト文字コード設定

Ubuntu では MySQL の設定ファイルは /etc/mysql/my.cnf にあります。

このファイルの [client], [mysqld] ブロックそれぞれに以下の行を追記します。

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

(※ 古いMySQLは[mysqld]もdefault-character-set=utf8)

設定を有効にするために、MySQLを再起動。

$ sudo services mysql restart

これで、MySQLのデフォルト文字コードがUTF-8になります。

$ rake db:carset RAILS_ENV="production"
# => latin1
$ mysql -u root -p
Enter password: ********

mysql> status
--------------
mysql Ver 14.14 Distrib 5.5.24, for debian-linux-gnu (i686) using readline 6.2

Server version: 5.5.24-0ubuntu0.12.04.1 (Ubuntu)
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
--------------



DBを作りなおしてから、フィクスチャをロードしなおしたところ、アプリケーション側の表示も正常になっていました。


【3】結論

世界はUTF-8で廻れ!

コメントの投稿

非公開コメント

カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
検索フォーム
カテゴリ
月別アーカイブ
最新記事
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QR
リンク
アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。