Mvsql-zeichenfolgenliterale im Jitterbit App Builder
Der SQL-Standard definiert zwei Zeichenfolgentypen mit jeweils einer eigenen Literalsyntax.
- ANSI
- National
ANSI-Zeichenfolgen repräsentieren ASCII und andere Einzelbyte-Zeichensätze, wie beispielsweise EBCDIC auf DB2/i.
Nationale Zeichenfolgen stellen Mehrbyte-Zeichensätze wie Unicode dar.
Der SQL-Standard definiert für jeden Zeichenfolgentyp eine eigene Literalsyntax. Die Syntax für ein ANSI-Zeichenfolgenliteral lautet:
'Aristotle''s quotes'
Beachten Sie, dass einfache Anführungszeichen, die in den Zeichenfolgenliteral eingebettet sind, durch Verdoppelung des einfachen Anführungszeichens maskiert werden.
Die Syntax für einen Zeichenfolgenliteral „National“ lautet:
N'Aristotle''s quotes'
mvSQL unterstützt die SQL-Standardsyntax für ANSI- und nationale Zeichenfolgenliterale.
Notiz
Die Verwendung der falschen SQL-Literalsyntax kann zu erheblichen Leistungseinbußen führen. Bei einer Spalte, die Daten in einem ANSI-Zeichensatz speichert, nutzt eine Suchbedingung, die ein National-String-Literal enthält, keine Indizes und erzwingt eine Konvertierung der Spaltenwerte.
Einige Datenbankmodule, wie z. B. Oracle, unterstützen keine impliziten Konvertierungen zwischen Zeichensätzen. Durch die Verwendung der entsprechenden Zeichenfolgenliteralsyntax werden Fehler vermieden und explizite Konvertierungen überflüssig.
Anbieterunterstützung
Sofern nicht anders dokumentiert, werden ANSI- und nationale Zeichenfolgenliterale direkt dem nativen Anbieteräquivalent zugeordnet.
MySQL
MySQL definiert keine separate Syntax für ANSI- und nationale Zeichenfolgenliterale. In MySQL wird davon ausgegangen, dass die Zeichenfolgenliterale mit dem Zeichensatz der Verbindung codiert sind. Dies bedeutet, dass die Codierung je nach Verbindungseinstellungen variieren kann. Wenn die Verbindung eine ANSI-Codierung verwendet (z. B. die Standardcodierung latin1), wird davon ausgegangen, dass alle Zeichenfolgen ANSI sind.
Hinweis
App Builder MySQL Verbindungen verwenden standardmäßig den UTF-8-Zeichensatz. Verwenden Sie den Parameter CharSet, um den Zeichensatz für MySQL -Verbindungen zu ändern. Um beispielsweise den MySQL Standard-ASCII-Zeichensatz zu verwenden, fügen Sie CharSet=latin1 zu den erweiterten Einstellungen hinzu.
MySQL unterstützt Zeichensatz-Einführer. Der „Einführer“ ist ein Präfix, das am Anfang des Zeichenfolgenliteralwerts hinzugefügt wird. Das Präfix gibt den Zeichensatz der Zeichenfolge an. App Builder verwendet Zeichensatzeinführer, um sicherzustellen, dass Unicode-Daten unabhängig von den Verbindungseinstellungen in Zeichenfolgenliteralen kodiert werden können. Wenn die Verbindung hingegen den Zeichensatz UTF-8 verwendet, stellt der Zeichensatzeinführer 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 wie folgt übersetzt wird:
_latin1'Aristotle''s quotes'
Ein mvSQL National-Zeichenkettenliteral wird in die MySQL-Syntax wie folgt übersetzt:
_utf8'Aristotle''s quotes'
MySQL definiert keine separaten Speicherdatentypen für ANSI- und nationale Zeichentypen. Stattdessen werden alle Zeichenfolgentypen in einem gemeinsamen Datentyp gespeichert. Der Zeichensatz bestimmt, wie die Daten gespeichert werden. App Builder ordnet MySQL -Zeichenspalten mit einem Unicode-Zeichensatz (utf8) dem entsprechenden, herstellerneutralen nationalen Zeichenkettentyp (z. B. NCHAR oder NVARCHAR) zu.
DB2/i
Wie MySQL verfügt DB2/i nicht über separate Datentypen für ANSI- und nationale Zeichenfolgen. Stattdessen bestimmt die CCSID die Kodierung. Die CCSID ist eine vorzeichenlose 16-Bit-Ganzzahl. Sie ähnelt in ihrer Art der Windows-LCID.
Wie bei MySQL, App Builder überprüft die CCSID, um eine korrekte Zuordnung von einem DB2/i Zeichentyp (z. B. VARCHAR) zu an App Builder, herstellerneutraler Datentyp (z. B. NVARCHAR). Die folgenden CCSIDs werden dem NVARCHAR-Datentyp zugeordnet:
- 1200 - UTF-16
- 1208 - UTF-8
- 13488 - UCS-2
Umgekehrt gilt beim Erstellen von Spalten mit einem nationalen Zeichendatentyp: App Builder legt die CCSID explizit fest. Insbesondere App Builder setzt die CCSID auf 1208 (UTF-8).
Schließlich muss DB2/i keine separate Syntax für ANSI- und nationale Zeichenfolgen haben. Daher wird für beide die gleiche Syntax verwendet.
Nicht-RDBMS-Datenquellen
mvSQL National-Zeichenfolgenliterale werden für Nicht-RDBMS-Datenquellen wie REST, 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