8

在 MongoDB 2.0.6 中,当尝试存储包含字符串字段的文档或查询文档时,其中字符串的值包含 BMP 之外的字符,我收到大量错误,例如:“不正确的 UTF-16:55357”,或“缓冲区太小”

有哪些设置、更改或建议允许在 Mongo 中存储和查询多语言字符串,尤其是包含 0xFFFF 以上这些字符的字符串?

谢谢。

4

1 回答 1

8

这里有几个问题:

1) 请注意,MongoDB 使用 BSON 格式存储所有文档。另请注意,BSON 规范指的是 UTF-8 字符串编码,而不是 UTF-16 编码。

参考:http ://bsonspec.org/#/specification

2) 所有驱动程序,包括 mongo shell 中的 JavaScript 驱动程序,都应该正确处理编码为 UTF-8 的字符串。(如果他们不这样做,那就是一个错误!)许多驱动程序恰好也正确处理了 UTF-16,尽管据我所知,UTF-16 不受官方支持。

3) 当我使用 Python 驱动程序对此进行测试时,MongoDB 可以成功加载并返回一个包含损坏的 UTF-16 代码对的字符串值。但是,我无法使用 mongo shell 加载损坏的代码对,也无法将包含损坏代码对的字符串存储到 shell 中的 JavaScript 变量中。

4) mapReduce() 使用正确的 UTF-16 代码对在字符串数据上正确运行,但在尝试对包含损坏代码对的字符串数据运行 mapReduce() 时会产生错误。

当 MongoDB 尝试将 BSON 转换为 JavaScript 变量以供 JavaScript 引擎使用时,mapReduce() 似乎失败了。

5) 我已经为此问题提交了 Jira 问题 SERVER-6747。随时关注并投票。

于 2012-08-10T21:39:53.033 回答