Wenn Sie Unicode-Daten speichern möchten, erstellen Sie Unicode-Tabellen. Wenn Sie versuchen, Unicode-Daten in eine ASCII- oder EBCDIC-Tabelle einzufügen, können Daten verloren gehen, es sei denn, Sie verwenden maskierte Daten.
Informationen zu dieser Task
Empfehlung : Verwenden Sie beim Erstellen von Objekten Standardzeichen für die Objekt- und Spaltennamen. Sonderzeichen wie ü oder é können Ihre Anwendungen erschweren, wenn Konvertierungen erforderlich sind.
Prozedur
So erstellen Sie eine Unicode-Tabelle:
- Geben Sie in der Anweisung CREATE DATABASE, CREATE TABLESPACE oder CREATE TABLE die CCSID UNICODE-Klausel an.
Standardmäßig ist das Kodierungsschema einer Tabelle dasselbe wie das Kodierungsschema ihres Tabellenbereichs. Standardmäßig ist das Kodierungsschema des Tabellenbereichs auch dasselbe wie das Kodierungsschema seiner Datenbank. Sie können das Kodierungsschema mit der CCSID-Klausel in der CREATE TABLESPACE- oder CREATE TABLE-Anweisung überschreiben. Allerdings müssen alle Tabellen innerhalb eines Tabellenbereichs dieselbe CCSID haben.
- Geben Sie in der CREATE TABLE-Anweisung für jede Spaltendefinition den entsprechenden Datentyp, Untertyp und Längenwert an.
- Datentyp
Verwenden Sie einen der folgenden Datentypen:
- Für UTF-8 -Daten erstellen Sie Spalten vom Typ CHAR, VARCHAR oder CLOB.
- Für Daten von UTF-16 erstellen Sie Spalten vom Typ GRAPHIC, VARGRAPHIC oder DBCLOB.
- Für binäre Daten erstellen Sie Spalten vom Typ BINARY, VARBINARY und BLOB.
Empfehlung : Verwenden Sie für Unicode-Tabellen im Allgemeinen Spalten unterschiedlicher Länge, da die Anzahl der Bytes in einer Unicode-Spalte in der Regel zwei- bis dreimal so hoch ist wie die einer EBCDIC-Spalte.
Die allgemeine Richtlinie lautet, dass Spalten mit einer Länge von mehr als 18 Byte eine variable Länge haben sollten, es sei denn, Sie wissen, dass die gesamte Spalte immer ausgefüllt werden soll. Wenn Sie beispielsweise einen Zeitstempel in Zeichenform speichern (nicht als Db2 TIMESTAMP-Datentyp), benötigen Sie eine Spalte mit einer bestimmten Anzahl von Zeichen. In DB2® 9 würde diese Zahl 26 Zeichen lang sein. (In ASCII, EBCDIC oder UTF-8 beträgt diese Spalte 26 Byte. In UTF-16 ist diese Spalte 52 Byte lang.) Da der Zeitstempel immer dieselbe Größe hat, spart die Verwendung einer Spalte mit variabler Länge keinen Speicherplatz. Nehmen wir jedoch an, Sie haben ein Namensfeld, das in ASCII oder EBCDIC vorliegt und Namen mit 26 Zeichen zulässt. (In ASCII SBCS oder EBCDIC SBCS verwenden Sie 26 Bytes. In UTF-8 benötigen Sie 78 Bytes. In UTF-16 benötigen Sie 52 Bytes.) In diesem Fall sollten Sie eine Spalte mit variabler Länge verwenden, da das Namensfeld wahrscheinlich viele Leerzeichen enthält, die Sie nicht speichern möchten.
- untergeordneter Typ
- Für Zeichenspalten können Sie optional einen der folgenden Untertypen für die Spalte angeben, indem Sie die FOR-Untertyp-DATA-Klausel zur Spaltendefinition hinzufügen:
- SBCS
- Geben Sie diesen Subtyp an, wenn die Spalte nur die UTF-8 -Zeichen enthalten soll, die als 1 Byte gespeichert sind. Diese Zeichen sind die ersten 128 Zeichen in der Unicode-Codepage. Daten, die in einer SBCS-Zeichenspalte in einer Unicode-Tabelle gespeichert sind, haben eine CCSID von 367.
- MIXED
- Geben Sie diesen Subtyp an, wenn die Spalte UTF-8 -Daten enthalten soll, die mehr als 1 Byte groß sind. GEMISCHT ist der Standardwert. Zeichendaten in einer Unicode-Tabelle werden standardmäßig als gemischte Daten gespeichert, auch wenn Ihr Subsystem mit einem MIXED DECP-Wert von NO definiert ist. Daten, die in einer Spalte mit gemischten Zeichen in einer Unicode-Tabelle gespeichert sind, haben eine CCSID von 1208.
- BIT
- Dieser Subtyp gibt an, dass die Spalte BIT-Daten enthält. CCSID 66534 ist mit FOR BIT DATA-Spalten verknüpft.
Empfehlung : Obwohl Sie auch den Untertyp BIT für CHAR- und VARCHAR-Spalten angeben können, die BIT-Daten enthalten, sollten Sie stattdessen die Datentypen BINARY oder VARBINARY verwenden.
Verwenden Sie FOR BIT DATA-Spalten nicht ausschließlich für die Verarbeitung internationaler Daten. Verwenden Sie FOR BIT DATA-Spalten nur, wenn Sie einen bestimmten Grund haben, z. B. Verschlüsselung. Andernfalls kann dieser Datentyp Probleme verursachen. Wenn Sie beispielsweise eine Zeichenfolge der Länge 10 in eine Spalte "FOR BIT DATA" der Länge 12 einfügen, füllt Db2 die Zeichenfolge mit zwei Leerzeichen auf. Der Hexadezimalwert, der für diese Leerzeichen verwendet wird, ist systemspezifisch. Zum Beispiel wird X'40' für EBCDIC und X'20' für Unicode verwendet. Diese unterschiedlichen Hexadezimalwerte können bei der Konvertierung dieser Daten möglicherweise Probleme verursachen.
- Länge
- Um den geeigneten Längenwert zu bestimmen, folgen Sie den Anweisungen in der Spalte "Estimating the column size for Unicode data ".
Db2 ordnet der Spalte je nach angegebenem Datentyp eine bestimmte CCSID zu. In der folgenden Tabelle sind die möglichen Spaltendatentypen in einer Unicode-Tabelle und die CCSIDs zusammengefasst, die den Daten in diesen Spalten zugeordnet sind.
Tabelle 1. CCSIDs, die mit Spalten in einer Unicode-Tabelle verknüpft sind
| Spaltendatentyp |
Assoziiertes CCSID |
Format, in dem die Daten gespeichert werden |
| CHAR3.a |
1208 |
UTF-8 |
| CHAR FÜR SBCS-DATEN |
367 |
7-Bit-ASCII |
| CHAR FÜR GEMISCHTE DATEN |
1208 |
UTF-8 |
| CHAR FOR BIT DATA |
66534 |
Nicht zutreffend |
| VARCHAR3.a |
1208 |
UTF-8 |
| VARCHAR FÜR SBCS-DATEN |
367 |
7-Bit-ASCII |
| VARCHAR FÜR GEMISCHTE DATEN |
1208 |
UTF-8 |
| VARCHAR FOR BIT DATA |
66534 |
Nicht zutreffend |
| CLOB3.a |
1208 |
UTF-8 |
| CLOB FÜR SBCS-DATEN |
367 |
7-Bit-ASCII |
| CLOB FÜR GEMISCHTE DATEN |
1208 |
UTF-8 |
| GRAPHIC |
1200 |
UTF-16 |
| VARGRAPHIC |
1200 |
UTF-16 |
| DBCLOB |
1200 |
UTF-16 |
Hinweis:
- Wenn Sie keinen Untertyp angeben, geht Db2 von "FOR MIXED DATA" aus.
|
Beispiel
Die folgende CREATE TABLE-Anweisung erstellt eine Unicode-Tabelle.CREATE TABLE UNITAB
(C1 CHAR(4)FOR SBCS DATA,
C2 CHAR(4),
C3 GRAPHIC(4),
C4 VARCHAR(4) FOR SBCS DATA,
C5 VARCHAR(4),
C6 VARGRAPHIC(4))
CCSID Unicode

Die Spalten C1 und C4 können nur 1-Byte- UTF-8 -Daten enthalten. (Diese Daten haben CCSID 367 und werden im 7-Bit-ASCII-Format gespeichert.) Die Spalten C2 und C5 können beliebige UTF-8 -Daten enthalten. Die Spalten C3® und C6 können UTF-16 -Daten enthalten.
Die Spalten CHAR und VARCHAR haben jeweils eine Länge von 4 Byte. Diese Länge bedeutet, dass jede dieser Spalten eines der folgenden Zeichen oder Zeichensätze enthalten kann:
- ein UTF-8 -Zeichen, das 4 Byte groß ist
- zwei UTF-8 -Zeichen, die jeweils 2 Byte groß sind
- ein 3-Byte-Zeichen UTF-8 und ein 1-Byte-Zeichen UTF-8
- vier 1-Byte-Zeichen UTF-8
Die Spalten GRAPHIC und VARGRAPHIC haben jeweils eine Länge von 4 UTF-16 -Code-Einheiten. (Eine UTF-16 -Code-Einheit besteht aus 16 Bit oder 2 Byte.) Für UTF-16 bedeutet eine Länge von 2 Byte, dass es sich um 4 Zeichen handelt. Diese Länge entspricht jedoch nicht immer 4 Zeichen. Berücksichtigen Sie zusätzliche UTF-16 -Zeichen, die jeweils 2 UTF-16 -Code-Einheiten oder 4 Bytes entsprechen. Wenn Sie zusätzliche Zeichen in die Spalte einfügen, kann die Spalte nicht 4 Zeichen enthalten. Die Länge dieser Spalte kann also je nach Größe des Zeichens 2, 3 oder 4 Zeichen enthalten. Zum Beispiel kann jede dieser GRAPHIC- und VARGRAPHIC-Spalten eines der folgenden Zeichen oder Zeichensätze enthalten:
- vier 2-Byte-Zeichen UTF-16
- zwei 4-Byte-Zeichen UTF-16
- ein 4-Byte-Zeichen UTF-16 und zwei 2-Byte-Zeichen UTF-16