MongoDB可以在基本多语言平面之外的代码点存储和操作UTF-8字符串吗?

Eli*_*Eli 7 multilingual utf-8 mongodb gorm-mongodb astral-plane

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

允许在Mongo中存储和查询多语言字符串的设置,更改或建议是什么,特别是那些包含这些字符超过0xFFFF的字符串?

谢谢.

Wil*_*m Z 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.随意关注并投票.