2011-03-23 739 views
4

我正在使用Mongoid爲我的ORM從MySQL表導入數據到MongoDB。嘗試將電子郵件地址保存爲字符串時出現錯誤。錯誤是:當通過Mongoid ORM保存到MongoDB的UTF8兼容字符串時,字符串無效UTF-8(BSON :: InvalidStringEncoding)

/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編碼。

table info

從我的GUI

而且 - 這是場在我的MySQL表的屏幕截圖,我進口

what the data looks like in mysql GUI

這是當我搶從MySQL中的數據發生了什麼CLI。

what the data looks like in mysql CLI

最後,當我檢查我的紅寶石對象中的數據,我得到的東西看起來是這樣的: inspected ruby object

我有點困惑,因爲在這裏我無關表是UTF -8,而且這個時髦顯然是有效的UTF-8字符作爲雙字節。任何人都知道我爲什麼得到這個錯誤?

+0

如果您可以向jira.mongodb.org發佈可複製的示例,這將是最有幫助的。這樣,我們可以測試並確保驅動程序的UTF-8檢查中沒有錯誤。它使用標準的UTF-8驗證庫。 – 2011-03-23 18:03:24

回答

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中的這些編碼之一。

+0

從latin1轉換到utf8工作。奇怪我的數據庫是如何編碼(或聲稱是)在utf8中。萬分感謝! – Tony 2011-03-24 14:09:57