通过Mongoid ORM将UTF8兼容字符串保存到MongoDB时,字符串无效UTF-8(BSON :: InvalidStringEncoding)

时间:2011-03-23 16:42:58

标签: ruby utf-8 mongodb mongoid bson

我使用Mongoid为我的ORM将数据从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编码。

table info

同样来自我的GUI - 这是我导入的MySQL表中字段的屏幕截图

what the data looks like in mysql GUI

当我从MySQL CLI获取数据时会发生这种情况。

what the data looks like in mysql CLI

最后,当我检查ruby对象中的数据时,我得到的内容如下所示: inspected ruby object

我在这里有点困惑,因为无论我的表是UTF-8还是那个funky显然是有效的UTF-8字符作为双字节。有人知道我为什么会收到这个错误吗?

1 个答案:

答案 0 :(得分:6)

尝试使用此助手:

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

它提出了一个方法utf8?在字符串上。所以你可以从mysql中获取String并查看它是否是utf8:

my_string.utf8?

如果不是,那么您可以尝试使用其他方法更改String的编码:

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

也许这个String在其中一个编码中保存在mysql上。