MongoDB是否可以存储和操作UTF-8字符串,其代码点是否位于基本多语言平面之外?

MongoDB是否可以存储和操作UTF-8字符串,其代码点是否位于基本多语言平面之外?,mongodb,utf-8,multilingual,astral-plane,gorm-mongodb,Mongodb,Utf 8,Multilingual,Astral Plane,Gorm Mongodb,在MongoDB 2.0.6中,当试图存储包含字符串字段的文档或查询文档时,如果字符串的值包含BMP之外的字符,我会收到大量错误,如:“不正确的UTF-16:55357”或“缓冲区太小” 有哪些设置、更改或建议允许在Mongo中存储和查询多语言字符串,特别是包含0xFFFF以上字符的字符串 谢谢。这里有几个问题: 1) 请注意,MongoDB使用BSON格式存储所有文档。还要注意,BSON规范引用的是UTF-8字符串编码,而不是UTF-16编码 参考: 2) 所有驱动程序,包括mongo she

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

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


谢谢。

这里有几个问题:

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

参考:

2) 所有驱动程序,包括mongo shell中的JavaScript驱动程序,都应该正确处理编码为UTF-8的字符串。(如果他们不这样做,那就是一个bug!)许多驱动程序碰巧也能正确处理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问题服务器-6747。请随时关注并投票。

您能公布您得到的确切错误吗?另外,您使用什么驱动程序访问MongoDB?(这很容易是一个驱动程序错误。)较长的错误形式如下:com.mongodb.CommandResult$CommandFailure:command failed[command failed[mapreduce]{“serverUsed”:“127.0.0.1:27017”,“断言”:“不正确的UTF-16:55356”,“断言代码”:13498,“errmsg”:“db断言失败”,“确定”:0.0}显然,顺便提一下,我应该在我的问题中引用UTF-16。它抱怨的代码是D83C,我很确定这是补充代码平面中某个东西的UTF-16代理项对的高级代码。根据MongoDB GORM插件中的dependencies.groovy文件,它使用的是MongoDB Java驱动程序版本2.7.1。。。编译(“org.mongodb:mongo java driver:2.7.1”,,不包括)…深入研究mongodb代码,我发现此错误消息来自Spider Monkey,当JS_EncodeCharacters出现故障时,在mongo/scripting/engine_spidermonkey.cpp的第205行或大约205行。感谢您检查此消息,@WilliamZExcellent。感谢@WilliamZ查看此消息。