MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB peut-il stocker et manipuler des chaînes UTF-8 avec des points de code en dehors du plan multilingue de base ?

Il y a plusieurs problèmes ici :

1) Veuillez noter que MongoDB stocke tous les documents au format BSON. Notez également que la spécification BSON fait référence à un encodage de chaîne UTF-8, et non à un encodage UTF-16.

Réf :http://bsonspec.org/#/specification

2) Tous les pilotes, y compris le pilote JavaScript dans le shell mongo, doivent gérer correctement les chaînes codées en UTF-8. (Si ce n'est pas le cas, c'est un bogue !) De nombreux pilotes gèrent correctement l'UTF-16, même si, à ma connaissance, l'UTF-16 n'est pas officiellement pris en charge.

3) Lorsque j'ai testé cela avec le pilote Python, MongoDB a pu charger et renvoyer avec succès une valeur de chaîne contenant une paire de codes UTF-16 cassée. Cependant, je ne pouvais pas charger une paire de codes cassés à l'aide du shell mongo, ni stocker une chaîne contenant une paire de codes cassés dans une variable JavaScript du shell.

4) mapReduce() s'exécute correctement sur des données de chaîne en utilisant une paire de codes UTF-16 correcte, mais génère une erreur lors de la tentative d'exécution de mapReduce() sur des données de chaîne contenant une paire de codes cassée.

Il semble que mapReduce() échoue lorsque MongoDB essaie de convertir le BSON en une variable JavaScript à utiliser par le moteur JavaScript.

5) J'ai déposé le problème Jira SERVER-6747 pour ce problème. N'hésitez pas à le suivre et à le voter.