2013年4月28日日曜日

mysqlで日本語挿入できない

mysql使ってて日本語の文章入れようとしたらエラーがでた

Mysql2::Error: Incorrect string value: '\xE6\xA5\xBD\xE5\xA4\xA9' for column 'keyword' at row 1: UPDATE `keywords` SET `keyword` = '楽天', `updated_at` = '2013-04-28 11:22:00' WHERE `keywords`.`id` = 1

みたいな感じ string おかしいよ的なエラー

でgoogle先生に聞いてみるともともとのmysqlでutf8になってないから

データベースの文字コードを調べてみる

mysql> use album_development;
Database changed
mysql> show variables like 'character_set%';


character_set_server     とかが latin1だった

そこで問題!

/etc/my.cnfに


[mysqld]
default-character-set=utf8

[mysql]
default-character-set=utf8


っと両方にdefault-character-set=utf8を設定しちゃうとなぜかmysqlが起動しない。
なぜかわからずそういう仕様みたいです。

こんなエラーでます
「Can't connect to local MySQL server through socket '/tmp/mysql.sock'」
http://www.hi-ho.ne.jp/tsumiki/book_sup2.html


そんで正しい設定は

[mysqld]
character-set-server=utf8
⬆ただしくはこうするみたい
[mysql]
default-character-set=utf8


をmy.confにかいて再起動しましょう
# sudo /usr/local/mysql/support-files/mysql.server stop
# sudo /usr/local/mysql/support-files/mysql.server start

sudo service mysqld restart でもいいみたい

参考
http://blog.livedoor.jp/tempdog/archives/227852.html

http://d.hatena.ne.jp/ahahasasa/20120116/1326729989

http://d.hatena.ne.jp/nightmare_tim/20110530/1306704112

ちなみに db/database.ymlにencoding:utf8と書いてもだめだった
http://d.hatena.ne.jp/kusakari/20070906/1189097609

0 件のコメント:

コメントを投稿