ちゃんと文字コードはあわせましょう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に修正。
再度とらい。

通った!
で、実際にサーバー起動して表示させてみると、ちゃんと表示されてた!
よかったー。。。ちゃんと作る時にみとかないと駄目ね。。。