4

ORM に Mongoid を使用して、MySQL テーブルから MongoDB にデータをインポートしています。メール アドレスを文字列として保存しようとすると、エラーが発生します。エラーは次のとおりです。

/Library/Ruby/Gems/1.8/gems/bson-1.2.4/lib/../lib/bson/bson_c.rb:24:in `serialize': String not valid UTF-8 (BSON::InvalidStringEncoding)
    from /Library/Ruby/Gems/1.8/gems/bson-1.2.4/lib/../lib/bson/bson_c.rb:24:in `serialize'

私の GUI から - これはテーブル情報のスクリーンショットです。UTF8 でエンコードされていることがわかります。

テーブル情報

また、私の GUI から - これは、インポートしている MySQL テーブルのフィールドのスクリーン ショットです。

mysql GUI でデータがどのように見えるか

これは、MySQL CLI からデータを取得するとどうなるかです。

mysql CLI でデータがどのように見えるか

最後に、Ruby オブジェクトのデータを調べると、次のような結果が得られます。 検査されたルビーオブジェクト

私のテーブルがUTF-8であり、そのファンキーが2バイトとして明らかに有効なUTF-8文字であるため、ここで少し混乱しています。このエラーが発生する理由を知っている人はいますか?

4

1 に答える 1

6

このヘルパーを使用してみてください:

http://snippets.dzone.com/posts/show/4527

メソッド utf8? を配置します。文字列で。したがって、mysql から文字列を取得して、それが utf8 かどうかを確認できます。

my_string.utf8?

そうでない場合は、次のような他の方法を使用して文字列のエンコーディングを変更してみてください。

my_string.asciify_utf8
my_string.latin1_to_utf8
my_string.cp1252_to_utf8
my_string.utf16le_to_utf8

おそらく、この文字列は、これらのエンコーディングのいずれかで mysql に保存されます。

于 2011-03-24T11:37:09.213 に答える