ちゃんと文字コードはあわせましょうbyRails+MySQL
mysqlでもtest/fixtures/categories.ymlでテストデータ入れられるのかとりあえずやってみました。
そしたらなんかエラー。。。
C:\rails\rjs_tutorial>rake db:fixtures:load
(in C:/rails/rjs_tutorial)
rake aborted!
Mysql::Error: Data too long for column 'name' at row 1: INSERT INTO `categories`
(`name`, `updated_at`, `id`, `description`, `created_at`) VALUES ('猫T', '2009-
01-20 07:17:46', 831344649, '猫の写真をあしらった', '2009-01-20 07:17:46')
Mysqlの方でエラーが出てる。。何で。。
で、ためしに↑で出ていたInsert文を直接Mysql起動させて打ってみることに。
すると同じエラーが。。
ERROR 1406 (22001): Data too long for column 'name' at row 1
なんだ。。データが長すぎるって言ってるけど、なんで。。。
色々とデータ少なくしてみましたが、事態変わらず。
で、ちょっと色々引っ掛けて調べてみたら、どうやらMysqlと、クエリとで文字コードが違うと起こるらしい。
なのでMysqlの文字コードをsjisにして再度実行。
set names sjis;
通った!やっぱりそうらしい。。
じゃ今度はrakeタスクからやる場合に文字コード指定してあげればよいので、多分そこら辺はdatabase.ymlを見に行ってるはず。
ここのencodingを
encoding: sjis
にして、再度実行!
C:\rails\rjs_tutorial>rake db:fixtures:load
(in C:/rails/rjs_tutorial)
いけた!
テーブル確認してみても、ちゃんとデータ入ってる。
やっぱり文字コードあってなかったのが原因なのね。。
でもこれじゃ表示する時UTF8だからどっちにしろ化ける。。
ので、テーブル作り直し。。。
http://wota.jp/ac/?date=20061011
ここを参考に、mysqlのmy.iniファイルに追記。
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
で、再度テーブルを作り直し。
こうすればTable自体がUTF8になるハズ。
で、これにあわせてdatabase.ymlをutf8に修正。
さて、これでいくだろー
…えらった。。。しかも同じエラー・・・
なんで。。utf8なんで駄目なの。。
と、ふとtest/fixtures/categories.ymlのファイル自体がSJISになっている事に気が付いて、はた、と。。。
もしかして…こいつがutf8になってないからか。。。
ってことで、test/fixtures/categories.ymlをutf8に修正。
再度とらい。
通った!
で、実際にサーバー起動して表示させてみると、ちゃんと表示されてた!
よかったー。。。ちゃんと作る時にみとかないと駄目ね。。。