MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Kann MongoDB UTF-8-Zeichenfolgen mit Codepunkten außerhalb der grundlegenden mehrsprachigen Ebene speichern und bearbeiten?

Hier gibt es mehrere Probleme:

1) Bitte beachten Sie, dass MongoDB alle Dokumente im BSON-Format speichert. Beachten Sie auch, dass sich die BSON-Spezifikation auf eine UTF-8-Zeichenfolgencodierung bezieht, nicht auf eine UTF-16-Codierung.

Siehe:http://bsonspec.org/#/specification

2) Alle Treiber, einschließlich des JavaScript-Treibers in der Mongo-Shell, sollten Zeichenfolgen, die als UTF-8 codiert sind, ordnungsgemäß verarbeiten. (Wenn sie es nicht tun, dann ist es ein Fehler!) Viele der Treiber können UTF-16 auch richtig handhaben, obwohl UTF-16 meines Wissens nicht offiziell unterstützt wird.

3) Als ich dies mit dem Python-Treiber getestet habe, konnte MongoDB erfolgreich einen Zeichenfolgenwert laden und zurückgeben, der ein defektes UTF-16-Codepaar enthielt. Ich konnte jedoch weder ein defektes Codepaar mit der Mongo-Shell laden noch einen String mit einem defekten Codepaar in einer JavaScript-Variablen in der Shell speichern.

4) mapReduce() wird korrekt auf String-Daten mit einem korrekten UTF-16-Codepaar ausgeführt, es wird jedoch ein Fehler generiert, wenn versucht wird, mapReduce() auf String-Daten auszuführen, die ein fehlerhaftes Codepaar enthalten.

Es scheint, dass mapReduce() fehlschlägt, wenn MongoDB versucht, den BSON in eine JavaScript-Variable zur Verwendung durch die JavaScript-Engine umzuwandeln.

5) Ich habe für dieses Problem das Jira-Problem SERVER-6747 eingereicht. Fühlen Sie sich frei, ihm zu folgen und abzustimmen.