Zeichenfolgen
Eine Zeichenfolge ist eine Folge von Codeeinheiten. Die Länge der Zeichenfolge ist die Anzahl der Codeeinheiten in der Sequenz. Wenn die Länge null ist, wird der Wert als leere Zeichenfolgebezeichnet, die nicht mit dem Nullwert verwechselt werden darf.
Zeichenfolge fester Länge (CHAR)
Alle Werte in einer Zeichenfolgespalte mit fester Länge haben dieselbe Länge, die durch das Längenattribut der Spalte bestimmt wird. Das Längenattribut muss im Bereich von 1 bis 255 einschließlich liegen , es sei denn, die Zeichenfolgeeinheit ist CODEUNITS32, die einen Bereich von 1 bis 63 einschließlich hat.
Zeichenfolgen mit variabler Länge
- VARCHAR
- Ein VARCHAR-Wert kann bis zu 32.672 Byte lang sein. Wenn die Zeichenfolgeeinheit CODEUNITS32ist, kann die Länge bis zu 8.168 Zeichenfolgeeinheiten betragen.
- CLOB
- Ein Zeichenwert eines großen Objekts (CLOB) kann bis zu 2 Gigabyte minus 1 Byte (2.147.483.647 Byte) lang sein oder, wenn die Zeichenfolgeeinheit CODEUNITS32ist, bis zu 536.870.911 Zeichenfolgeeinheiten. Ein CLOB wird zum Speichern großer SBCS-oder gemischter (SBCS und MBCS) zeichenbasierter Daten (z. B. Dokumente, die mit einem einzelnen Zeichensatz geschrieben wurden) verwendet und verfügt daher über eine zugeordnete SBCS-oder gemischte Codepage.
- Eine SELECT-Liste, der die Klausel DISTINCT vorangestellt ist
- In der Klausel GROUP BY
- In der Klausel ORDER BY
- Eine Unterauswahl eines anderen Gruppenoperators als UNION ALL
- Ein Basis-, Quantified-, BETWEEN-oder IN-Prädikat
- Eine Aggregatfunktion
- VARGRAPHIC-, TRANSLATE-und datetime-Skalarfunktionen
- Der Musteroperand in einem Prädikat LIKE oder der Suchzeichenfolgeoperand in einer POSSTR-Funktion
- Die Zeichenfolgedarstellung eines Datums-/Uhrzeitwerts.
Die Funktionen im SYSFUN-Schema, die einen VARCHAR als Argument verwenden, akzeptieren keine VARCHARs mit mehr als 4.000 Byte als Argument. Viele dieser Funktionen haben jedoch auch eine alternative Signatur, die ein CLOB (1M) akzeptiert. Für diese Funktionen kann der Benutzer die mehr als 4.000 VARCHAR-Zeichenfolgen explizit in CLOBs umsetzen und dann das Ergebnis wieder in VARCHARs mit der erforderlichen Länge umwandeln.
NUL-terminierte Zeichenfolgen, die in C gefunden werden, werden abhängig von der Standardstufe der Vorkompilierungsoption unterschiedlich behandelt.
- BIT DATA
- Daten, die keiner Codepage zugeordnet sind.
- SBCS-Daten (Einzelbytezeichensatz)
- Daten, bei denen jedes Zeichen durch ein Byte dargestellt wird.
- Gemischte Daten
- Daten, die eine Mischung aus Zeichen aus einem Einzelbytezeichensatz und einem Mehrbytezeichensatz (MBCS) enthalten können
Spezifikation von Zeichenfolgeeinheiten für Zeichenfolgen
- OCTETS
- Gibt an, dass es sich bei den Einheiten für das Längenattribut um Bytes handelt. Diese Längeneinheit gilt für alle Zeichenfolgedatentypen in einer Nicht-Unicode-Datenbank. In einer Unicode-Datenbank kann OCTETS explizit angegeben oder basierend auf einer Umgebungseinstellung bestimmt werden.
- CODEUNITS32
- Gibt an, dass es sich bei den Einheiten für das Längenattribut um Codeeinheiten von Unicode UTF-32 handelt, was der Zählweise in Zeichen ungefähr entspricht. Diese Längeneinheit wirkt sich nicht auf die dem Datentyp zugrundeliegende Codepage aus. Die tatsächliche Länge des Datenwerts wird bestimmt, indem die UTF-32-Codeeinheitein quantitativ erfasst werden, als ob Daten in UTF-32 konvertiert werden würden. Die Zeichenfolgeeinheit CODEUNITS32 kann nur in einer Unicode-Datenbank verwendet werden. CODEUNITS32 kann explizit angegeben oder basierend auf einer Umgebungseinstellung bestimmt werden.
In einer Nicht-Unicode-Datenbank ist die Zeichenfolgeeinheit immer OCTETS und kann nicht geändert werden. In einer Unicode-Datenbank können die Zeichenfolgeeinheiten explizit mit dem Längenattribut eines Zeichenfolgedatentyps oder auf der Basis einer Umgebungseinstellung angegeben werden. Wenn FOR BIT DATA auch für den Zeichenfolgedatentyp angegeben ist, kann CODEUNITS32 nicht angegeben werden und die Umgebungseinstellung CODEUNITS32 gilt nicht.
Die Umgebungseinstellung für Zeichenfolgeeinheiten basiert auf dem Wert für die globale Variable NLS_STRING_UNITS oder auf dem Datenbankkonfigurationsparameter string_units . Der Datenbankkonfigurationsparameter kann auf SYSTEM oder CODEUNITS32gesetzt werden. Die globale Variable kann auch auf SYSTEM oder CODEUNITS32gesetzt werden, aber auch auf NULL. Der Wert NULL gibt an, dass die SQL-Sitzung die Einstellung des Datenbankkonfigurationsparameters string_units verwenden soll. Wenn der Wert für die Umgebungseinstellung SYSTEM lautet, wird OCTETS als Standardeinstellung für Zeichenfolgeeinheiten verwendet.
Zeichenfolgeeinheiten in integrierten Funktionen
Die Möglichkeit, Zeichenfolgeeinheiten für bestimmte integrierte Zeichenfolgefunktionen anzugeben, ermöglicht es Ihnen, Zeichenfolgedaten "zeichenfolgebasierter" als "bytebasiert" zu verarbeiten. Die Zeichenfolgeeinheit bestimmt die Einheit, die beim Ausführen der Funktion für die Länge oder Position verwendet wird. Sie können CODEUNITS16, CODEUNITS32oder OCTETS als Zeichenfolgeeinheit für einige Zeichenfolgefunktionen angeben. Wenn keine Zeichenfolgeeinheit angegeben wird, wird die Standardzeichenfolgeeinheit normalerweise durch die Zeichenfolgeeinheiten des Quellenzeichenfolgearguments bestimmt (Details finden Sie in der Beschreibung der Funktion, die Sie verwenden). Das Argument für Zeichenfolgeeinheiten kann für Zeichenfolgefunktionen angegeben werden, die den Parameter in Unicode-oder Nicht-Unicode-Datenbanken unterstützen.
- CODEUNITS16
- Gibt an, dass Unicode UTF-16 die Einheit für die Operation ist. CODEUNITS16 ist nützlich, wenn eine Anwendung Daten in Codeeinheiten mit einer Breite von 2 Byte verarbeitet. Beachten Sie, dass für einige Zeichen, die als ergänzende Zeichenbezeichnet werden, zwei UTF-16 -Codeeinheiten codiert werden müssen. Das musikalische Symbol G clef erfordert beispielsweise zwei UTF-16 -Codeeinheiten (X'D834' und X'DD1E' in UTF-16BE).
- CODEUNITS32
- Gibt an, dass Unicode UTF-32 die Einheit für die Operation ist. CODEUNITS32 ist nützlich für Anwendungen, die Daten in einem einfachen Format fester Länge verarbeiten und unabhängig vom Speicherformat der Daten (ASCII, UTF-8oder UTF-16) dieselbe Antwort zurückgeben müssen.
- OCTETS
- Gibt an, dass Byte die Einheiten für die Operation sind. OCTETS wird häufig verwendet, wenn eine Anwendung an der Zuordnung von Pufferspeicher interessiert ist oder wenn Operationen einfache Byteverarbeitung verwenden müssen.
Die berechnete Länge einer mit OCTETS (Byte) berechneten Zeichenfolge kann von der mit CODEUNITS16 oder CODEUNITS32berechneten Länge abweichen. Wenn Sie OCTETS verwenden, wird die Länge der Zeichenfolge durch einfaches Zählen der Anzahl Byte in der Zeichenfolge bestimmt. Wenn Sie CODEUNITS16 oder CODEUNITS32verwenden, wird die Länge der Zeichenfolge ermittelt, indem die Anzahl der 16 -Bit-oder 32-Bit-Codeeinheiten gezählt wird, die zur Darstellung der Zeichenfolge in UTF-16 oder UTF-32erforderlich sind. Eine mit CODEUNITS16 und CODEUNITS32 festgelegte Länge ist identisch, es sei denn, die Daten enthalten zusätzliche Zeichen (siehe Unterschied zwischen CODEUNITS16 und CODEUNITS32).
SELECT CHARACTER_LENGTH(NAME,CODEUNITS16) FROM T1
WHERE NAME = 'Jürgen'
SELECT CHARACTER_LENGTH(NAME,CODEUNITS32) FROM T1
WHERE NAME = 'Jürgen'Die nächste Abfrage, die die Länge der Zeichenfolge in OCTEts zählt, gibt den Wert 7 zurück. SELECT CHARACTER_LENGTH(NAME,OCTETS) FROM T1
WHERE NAME = 'Jürgen'Diese Werte stellen die Länge der Zeichenfolge dar, die in der angegebenen Zeichenfolgeeinheit ausgedrückt wird.Format Representation of the name 'Jürgen'
-------- --------------------------------------
UTF-8 X'4AC3BC7267656E'
UTF-16BE X'004A00FC007200670065006E'
UTF-32BE X'0000004A000000FC0000007200000067000000650000006E'Die Darstellung des Zeichens 'ü' unterscheidet sich zwischen den drei Zeichenfolgeeinheiten:- Die UTF-8 -Darstellung des Zeichens 'ü' ist X'C3BC'.
- Die UTF-16BE -Darstellung des Zeichens 'ü' ist X'00FC'.
- Die UTF-32BE -Darstellung des Zeichens 'ü' ist X'000000FC'.
Die Angabe von Zeichenfolgeeinheiten für eine integrierte Funktion hat keine Auswirkungen auf den Datentyp, die Zeichenfolgeeinheiten oder die Codepage des Ergebnisses der Funktion. Bei Bedarf werden die Daten zur Auswertung in Unicode konvertiert, wenn CODEUNITS16 oder CODEUNITS32 angegeben wird.
Wenn OCTETS für die Funktion LOCATE oder POSITION angegeben wird und sich die Codepages der Zeichenfolgeargumente unterscheiden, werden die Daten in die Codepage des Arguments Quellenzeichenfolge konvertiert. In diesem Fall ist das Ergebnis der Funktion in der Codepage des Arguments source-string . Wenn OCTETS für Funktionen angegeben wird, die ein einzelnes Zeichenfolgeargument verwenden, werden die Daten in der Codepage des Zeichenfolgearguments ausgewertet und das Ergebnis der Funktion ist in der Codepage des Zeichenfolgearguments.
Unterschied zwischen CODEUNITS16 und CODEUNITS32
Wenn CODEUNITS16 oder CODEUNITS32 angegeben ist, ist das Ergebnis dasselbe, es sei denn, die Daten enthalten zusätzliche Unicode-Zeichen. Dies liegt daran, dass ein ergänzendes Zeichen durch zwei UTF-16 -Codeeinheiten oder eine UTF-32 -Codeeinheit dargestellt wird. In UTF-8wird ein nicht ergänzendes Zeichen durch 1 bis 3 Byte und ein ergänzendes Zeichen durch 4 Byte dargestellt. In UTF-16wird ein nicht ergänzendes Zeichen durch eine CODEUNITS16 -Codeeinheit oder 2 Byte und ein ergänzendes Zeichen durch zwei CODEUNITS16 -Codeeinheiten oder 4 Byte dargestellt. In UTF-32wird ein Zeichen durch eine CODEUNITS32 Codeeinheit oder 4 Byte dargestellt.
| Zeichen | UTF-8 -Darstellung | UTF-16BE -Darstellung | UTF-32BE -Darstellung |
|---|---|---|---|
| Unicode-Wert X'1D400' -'A'; mathematische Fettschrift A | X'F09D9080' | X'D835DC00' | X'0001D400' |
| Unicode-Wert X'0041 ' -'A'; lateinischer Großbuchstabe A | X'41' | X'0041' | X'00000041 ' |
Query Returns
----- -------
SELECT CHARACTER_LENGTH(C1,CODEUNITS16) FROM T1 2
SELECT CHARACTER_LENGTH(C1,CODEUNITS32) FROM T1 1
SELECT CHARACTER_LENGTH(C1,OCTETS) FROM T1 4