mvSQL-Zeichenfolgenliterale im Jitterbit App Builder
Der SQL-Standard definiert zwei Zeichenfolgentypen, jeder mit seiner eigenen Literalsyntax.
- ANSI
- National
ANSI-Zeichenfolgen repräsentieren ASCII und andere einbyte-Zeichencodierungen, wie EBCDIC auf DB2/i.
National-Zeichenfolgen repräsentieren mehrbyte-Zeichencodierungen wie Unicode.
Der SQL-Standard definiert eine separate Literalsyntax für jeden Zeichenfolgentyp. Die Syntax für ein ANSI-Zeichenfolgenliteral lautet:
'Aristoteles'' Zitate'
Beachten Sie, dass einfache Anführungszeichen, die innerhalb des Zeichenfolgenliterals eingebettet sind, durch Verdopplung des einfachen Anführungszeichens escaped werden.
Die Syntax für ein National-Zeichenfolgenliteral lautet:
N'Aristoteles'' Zitate'
mvSQL unterstützt die SQL-Standardsyntax für ANSI- und National-Zeichenfolgenliterale.
Hinweis
Die Verwendung der falschen SQL-Literalsyntax kann zu erheblichen Leistungseinbußen führen. Bei einer Spalte, die Daten in einem ANSI-Zeichensatz speichert, wird eine Suchbedingung, die ein National-Zeichenfolgenliteral enthält, keine Indizes nutzen und zwingt zu einer Konvertierung der Spaltenwerte.
Einige Datenbank-Engines, wie Oracle, unterstützen keine impliziten Konvertierungen zwischen Zeichencodierungen. Die Verwendung der entsprechenden Literalsyntax für Zeichenfolgen vermeidet Fehler und macht explizite Konvertierungen überflüssig.
Anbietersupport
Sofern nicht anders dokumentiert, werden ANSI- und National-Zeichenfolgenliterale direkt dem nativen Anbieteräquivalent zugeordnet.
MySQL
MySQL definiert keine separate Syntax für ANSI- und National-Zeichenfolgenliterale. In MySQL wird angenommen, dass das Zeichenfolgenliteral mit dem Zeichensatz der Verbindung codiert ist. Das bedeutet, dass die Codierung je nach Verbindungseinstellungen variieren kann. Wenn die Verbindung eine ANSI-Codierung verwendet (wie die Standard-latin1-Codierung), wird angenommen, dass alle Zeichenfolgen ANSI sind.
Hinweis
Der App Builder setzt MySQL-Verbindungen standardmäßig auf den UTF-8-Zeichensatz. Verwenden Sie den Parameter CharSet, um den Zeichensatz der MySQL-Verbindung zu ändern. Um beispielsweise den Standard-ASCII-Zeichensatz von MySQL zu verwenden, fügen Sie CharSet=latin1 zu den erweiterten Einstellungen hinzu.
MySQL unterstützt Zeichensatz-Einführungen. Die "Einführung" ist ein Präfix, das zu Beginn des Zeichenfolgenliteralwerts hinzugefügt wird. Das Präfix gibt den Zeichensatz der Zeichenfolge an. Der App Builder verwendet Zeichensatz-Einführungen, um sicherzustellen, dass Unicode-Daten in Zeichenfolgenliteralen kodiert werden können, unabhängig von den Verbindungseinstellungen. Umgekehrt stellt die Verwendung des UTF-8-Zeichensatzes in der Verbindung sicher, dass ASCII-Daten als ASCII an den Server übergeben werden, wodurch problematische Konvertierungen vermieden werden.
In der Praxis bedeutet dies, dass ein mvSQL ANSI-Zeichenfolgenliteral übersetzt wird in:
_latin1'Aristoteles' Zitate'
Ein mvSQL National-Zeichenfolgenliteral wird in die MySQL-Syntax übersetzt als:
_utf8'Aristoteles' Zitate'
MySQL definiert keine separaten Speicherdatentypen für ANSI- und National-Zeichentypen. Stattdessen werden alle Zeichentypen in einem gemeinsamen Datentyp gespeichert. Der Zeichensatz bestimmt, wie die Daten gespeichert werden. Der App Builder ordnet MySQL-Zeichenspalten mit einem Unicode-Zeichensatz (utf8) dem entsprechenden, herstellerneutralen National-Zeichenfolgen-Typ (z. B. NCHAR oder NVARCHAR) zu.
DB2/i
Wie MySQL hat DB2/i keine separaten Datentypen für ANSI- und National-Zeichenfolgen. Stattdessen bestimmt der CCSID die Kodierung. Der CCSID ist eine unsigned, 16-Bit-Ganzzahl. Er ist in seiner Natur ähnlich dem Windows LCID.
Wie bei MySQL untersucht der App Builder den CCSID, um korrekt von einem DB2/i-Zeichentyp (z. B. VARCHAR) zu einem App Builder, herstellerneutralen Datentyp (z. B. NVARCHAR) zuzuordnen. Die folgenden CCSIDs werden dem NVARCHAR-Datentyp zugeordnet:
- 1200 - UTF-16
- 1208 - UTF-8
- 13488 - UCS-2
Umgekehrt setzt der App Builder beim Erstellen von Spalten mit einem National-Zeichendatentyp explizit den CCSID. Konkret setzt der App Builder den CCSID auf 1208 (UTF-8).
Schließlich muss DB2/i keine separate Syntax für ANSI- und National-Zeichenfolgen haben. Daher wird dieselbe Syntax für beide verwendet.
Non-RDBMS-Datenquellen
mvSQL National-Zeichenliterale werden für Nicht-RDBMS-Datenquellen wie REST und Salesforce usw. nicht unterstützt.
Weiterführende Literatur
https://learn.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support
https://docs.microsoft.com/en-us/sql/t-sql/data-types/constants-transact-sql
https://dev.mysql.com/doc/refman/8.0/en/charset-introducer.html