rails - Mysql2::Error: Incorrect string value
次のエラーがでた場合。
Mysql2::Error: Incorrect string value:
原因を調べる
おおむね、データベースの文字コードを確認する。
たいてい latin1 とかになっている。
$ mysql -uuser -p my_db mysql > show create table posts; CREATE TABLE `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `text` text, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
もしくは、rake db:strcture:dump を使ってsqlを作成するのもよい。
db/structure.sql に出力される。
$ rake db:structure:dump $ less db/structure.sql
修正方法(1) - テーブルの文字コードをかえる
テーブル自体の文字コードをかえる。
mysql > alter table posts character set utf8;
フィールド(今回は title)の文字コードをかえる。
mysql > alter table posts modify title varchar(255) character set utf8;
修正方法(2) - データベース自体の文字コードをかえてデータベースを作りなおす
テスト用環境ならこちらのほうが手っ取り早い。
my.cnf を編集
[mysqld] character-set-server=utf8 ;default-character-set=utf8 # MySQL 5.5より前
サーバ再起動
# /sbin/service mysqld restart
データベースの再構築
$ rake db:drop $ rake db:create $ rake db:migrate