Freigeben über


Datenkonvertierung mithilfe des ODBC-Treibers für DB2

Der Entwurf von ODBC-APIs ähnelt anderen ISAM-APIs. Die APIs basieren auf Handles. Nach Öffnen einer Datei kann die Anwendung die zum Speichern einer Zeile benötigte Puffergröße bestimmen, zum Navigieren die Cursor-APIs verwenden und über die Bindung auf Zeilenebene optional eine oder mehrere Datenzeilen abrufen.

Daten werden in SQL-Standarddatentypen konvertiert, wie in ODBC definiert. In der folgenden Tabelle sind diese Konvertierungen aufgeführt.

DB2-Datentyp SQL-Standarddatentyp Verfügbar gemacht als nativer Typ in SQLGetTypeInfo Kommentare
BIGINT Eine ganze Zahl mit 8 Bytes.

Dieser Datentyp wird nur von DB2 UDB unterstützt.
BLOB Ein Binary Large Object (BLOB) ist eine Zeichenfolge mit unterschiedlicher Länge, die bis zu 2 Gb lang sein kann. Ein BLOB ist in erster Linie für binärdaten vorgesehen.

Dieser Datentyp wird vom ODBC-Treiber für DB2 nicht unterstützt.
CHAR (BIT) SQL_BINARY No Eine Zeichenfolge mit fester Länge (nur Doppelbyte).
CHAR (SBCS) SQL_CHAR Yes Eine SBCS-Zeichenfolge fester Länge.
CHAR (GEMISCHT) SQL_CHAR No Eine gemischte Zeichenfolge mit fester Länge (Einzel- und Doppelbytezeichenfolge).
CLOB Ein Character Large Object (CLOB) ist eine Zeichenfolge mit variabler Länge von bis zu 2 GB und enthält hauptsächlich Binärdaten. Ein CLOB wird verwendet, um große Einzelbyte-Zeichensatzdaten zu speichern. Ein CLOB wird als Zeichenfolge betrachtet.

Dieser Datentyp wird vom ODBC-Treiber für DB2 nicht unterstützt.
DATE SQL_TYPE_DATE Yes Eine Datumszeichenfolge mit 10 Bytes.

Dieser Datentyp wird zur Verwendung durch ODBC in einen SQL_DATE konvertiert.
DBCLOB Ein Double-Byte Character Large Object (DBCLOB) ist eine Zeichenfolge mit unterschiedlicher Länge aus Doppelbytezeichen, die bis zu 2 Gigabyte lang sein kann (1.073.741.823 Doppelbytezeichen). Ein DBCLOB wird verwendet, um große Doppelbyte-Zeichensatzdaten zu speichern. Ein DBCLOB wird als grafische Zeichenfolge betrachtet.

Es wird vom ODBC-Treiber für DB2 nicht unterstützt.
DECIMAL SQL_DECIMAL Yes Eine gepackte Dezimalzahl.
DOUBLE SQL_DOUBLE Yes Eine Gleitkommazahl mit doppelter Genauigkeit von 8 Byte.
FLOAT SQL_FLOAT Yes Eine Gleitkommazahl mit doppelter Genauigkeit von 8 Byte. Dieser Datentyp ist mit DOUBLE identisch.
GRAPHIC (DBCS) SQL_CHAR No Eine Grafische Zeichenfolge mit fester Länge, die aus einer Sequenz von Zeichenfolgendaten mit doppelten Bytezeichen (nur DBCS) besteht.
INTEGER SQL_INTEGER Yes Eine ganze 4-Byte-Zahl mit einer Genauigkeit von 10 Ziffern im Bereich von -2.147.463.648 bis +2.147.483.647.
LONG VARCHAR (BIT) SQL_BINARY No Eine Zeichenfolge mit unterschiedlicher Länge (nur Doppelbyte).
LONG VARCHAR (SBCS) SQL_CHAR No Eine SBCS-Zeichenfolge mit unterschiedlicher Länge.
LONG VARCHAR (MIXED) SQL_CHAR No Eine Zeichenfolge mit unterschiedlicher Länge (single- und double-byte).
LONG VARGRAPHIC (DBCS) SQL_LONGVARCHAR No Eine grafische Zeichenfolge mit unterschiedlicher Länge, die aus einer Sequenz von Zeichenfolgendaten mit doppelbyte (nur DBCS) besteht.
SMALLINT SQL_SMALLINT Yes Eine SMALLINT (kleine ganze Zahl) ist eine ganze Zahl mit 2 Bytes und einer Genauigkeit von fünf Stellen im Bereich von -32.768 bis +32.767.
REAL SQL_REAL Yes Eine 4-Byte-Gleitkommazahl mit einfacher Genauigkeit.
TIME SQL_TYPE_TIME Yes Eine Zeitzeichenfolge mit 8 Bytes.

Bei Verwenden von ActiveX Data Objects zum Zurückgeben von Daten mit einem DB2 TIME-Datentyp gibt ADO einen DATETIME-Wert zurück.
TIMESTAMP SQL_TYPE_TIMESTAMP Yes Eine Zeichenfolge mit 26 Bytes zum Abbilden von Datum, Uhrzeit und Mikrosekunden.
VARCHAR (BIT) SQL_BINARY No Eine Zeichenfolge mit unterschiedlicher Länge (nur double-byte).
VARCHAR (SBCS) SQL_CHAR Yes Eine Zeichenfolge variabler Länge.
VARCHAR (MIXED) SQL_CHAR No Eine gemischte Zeichenfolge mit unterschiedlicher Länge (Single- und Double-Bye).
VARGRAPHIC (DBCS) SQL_VARCHAR No Eine grafische Zeichenfolge unterschiedlicher Länge, die aus einer Sequenz von Doppelbyte (nur DBCS)-Zeichenfolgendaten besteht.

Nicht alle Plattformen und Versionen von DB2 unterstützen alle oben referenzierten Datentypen. In Ihrer IBM SQL-Referenz finden Sie die spezifische Ziel- und Plattform- und Version von DB2.

Der ODBC-Treiber für DB2 macht nur ausgewählte DB2-Datentypen als native Typen in der ODBC-Katalogfunktion GetTypeInfo verfügbar. Der Treiber macht z. B. keine TYPEN LONG CHARACTER oder VARYING LONG CHARACTER verfügbar. Vielmehr werden diese Typen als CHARACTER bzw. VARYING CHARACTER verfügbar gemacht. Außerdem macht der Treiber CHARACTER FOR SBCS DATA, CHARACTER FOR MIXED DATA und CHARACTER FOR BIT DATA als CHARACTER verfügbar. Der Treiber macht VARIABLES CHARACTER FÜR SBCS-DATEN, VARIIERENDE ZEICHEN FÜR GEMISCHTE DATEN UND VARIIERENDE ZEICHEN FÜR BITDATEN ALS VARIIERENDE ZEICHEN VERFÜGBAR. Der ODBC-Treiber für DB2 gibt jedoch diese Datentypen LONG und VARYING LONG zurück, wenn eine Tabelle mit diesen Datentypen gelesen wird. Wenn Sie beispielsweise eine Tabelle mit einer variablen Zeichenfolge mit einer Länge von mehr als 254 Bytes lesen, gibt der ODBC-Treiber für DB2 eine LONG VARCHAR zurück.

Die maximale Länge der DB2-Zeichen- und Grafikzeichenfolgendatentypen hängt von der DB2-Plattform und -Version ab. Beispielsweise weist ein CHAR-Typ in DB2 für z/OS V5R1 eine maximale Länge von 254 Bytes auf, während ein CHAR-Typ in DB2/400 V4R4 eine maximale Länge von 32.766 Bytes aufweist.

Datenkonvertierungen von einem großen numerischen Typ in einen kleinen numerischen Typ werden unterstützt (z. B. von DOUBLE zu SINGLE und von INT in SMALLINT), es können jedoch Abschneiden und Konvertierungsfehler auftreten, die vom ODBC-Treiber für DB2 nicht gemeldet werden.

Mithilfe des ODBC-Treibers für DB2 sind bestimmte Konvertierungen von Zeichenfolgen von EBCDIC in ASCII und dann zurück in EBCDIC asymmetrisch und können zu Zeichenfolgen führen, die sich von der ursprünglichen Zeichenfolge unterscheiden. Die EBCDIC-Spezifikation enthält Ordinalzahlen, für die es kein definiertes Zeichen gibt. Der ODBC-Treiber für DB2 übersetzt alle solchen undefinierten Zeichen in das Fragezeichen ("?"). Wenn ALSO ASCII-Zeichenfolgen, die diese Zeichen enthalten, wieder in EBCDIC konvertiert werden, werden diese nicht definierten Zeichen durch Fragezeichen ersetzt. Um EBCDIC-Zeichenfolgen mit undefinierten Zeichen zu schützen, müssen diese Felder als Binärzeichenfolgen markiert und von der Anwendung zugeordnet werden.

Die betroffenen ANSI-in-EBCDIC-Zeichenkonvertierungen umfassen Folgendes:

Zeichenwert (dezimal) Zeichenwert (hexadezimal) ANSI-Codepage 1252 EBCDIC-Zeichen nach Konvertierung in CCSID 37
128 0x80 Nicht verwendet ?
130 0x82 Einfaches unteres Anführungszeichen ?
131 0x83 Lateinisches F mit Haken ?
132 0x84 Doppeltes unteres Anführungszeichen ?
133 0x85 Auslassungszeichen ?
134 0x86 Kreuz ?
135 0x87 Doppelkreuz ?
136 0x88 Pro Meile ?
137 0x89 S mit Caron ?
138 0x8A Winkelzeichen links ?
139 0x8B Ligatur Oe ?
140 0x8C Nicht verwendet ?
142 0x8E Nicht verwendet ?
145-156 0x91-0x9C ?
158-159 0x9E-0x9F ?