2011-03-23 740 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