2013-05-03 19 views
8

私はスクレーパーを構築し、いくつかのオブジェクトを引っ張っています。問題はいくつかの外国語ですが、それは少しmysqlのデータベースをトリッピングしています。これは私が得たエラーです。私はこれで何ができますか?ありがとう!Mysql - Mysql2 ::エラー:不正な文字列値:

Mysql2::Error: Incorrect string value: '\xC5\x8Dga, ...' for column 'description' at row 1: INSERT INTO sammiches (country , created_at , description , image , name , updated_at) VALUES ('Japan', '2013-05-03 01:17:06', 'A hot dog bun stuffed with fried noodles, frequently topped with pickles, such as beni shōga, with mayonnaise', '/wiki/File:Yakisoba_sandwich_by_kaex0r.jpg', 'Yakisoba-pan', '2013-05-03

+0

使用UTF-8ルビー2.1で使用することができますか? – michaelb958

答えて

5

ここで答えを見つけることができます。重複を報告する方法がわかりません。あなたの便宜のために Mysql2::Error: Incorrect string value Rails 3 UTF8

、私は最近、この問題に遭遇していた私は私の答え


をあらためて表明しましょう。基本的にmysqlのデフォルト照合タイプはutf8_unicode_ciではありません。

以下を実行してください。バックアップが必要な場合は、データをバックアップしてください。 は、私はデータベースを削除し、

rake db:drop 
rake db:create 

、最後に(phpMyAdminのは、ここで便利になるかもしれない) をutf8_unicode_ci内移行を復元するために変更し、mysqlデータベースの照合順序を、それを再作成する必要がありました。

rake db:migrate 

お楽しみください。

9

あなたのテーブルは、Utf8以外のキャラクタセットに設定されている可能性があります。あなたはこのSQLでこれを変更することができます。

ALTER TABLE `your_database_name`.`your_table` CONVERT TO CHARACTER SET utf8 
+0

マイグレーションの内部: 'ModelName.connection.execute( 'ALTER TABLE model_names CONVERT TO CHARACTER SET utf8') ' –

+2

この問題が発生しましたが、私のテーブルはすでにUTF8ですか? –

+0

@TomRossi多言語面外にある可能性があります(https://dev.mysql.com/doc/refman/5.5/en/faqs-cjk.html#qandaitem-A-11-1-16) –

12

を使用すると、挿入しようとしている文字列が無効UTF-8バイトのシーケンスを持っている場合にもトリガすることができます。例えば、ルビーであなたは

string_with_invalid_sequences.encode('utf-8', 'binary', invalid: :replace, undef: :replace, replace: '') 

String#scrubを使用して無効な文字を削除することができ、データベースに以降

string_with_invalid_sequences.scrub 
+2

なぜか分からないけど、最初の提案は私を助け、スクラブは私のために働かなかった。 – across

+0

@across - これはあなたのために働きますか? 'string_with_invalid_sequences.scrub( '')'? – Mikey

+1

いいえ、それは私のために働かなかった。 – across

関連する問題