Freigeben über


SQL-Datentypen

Jedes DBMS definiert seine eigenen SQL-Typen. Jeder ODBC-Treiber macht nur die SQL-Datentypen verfügbar, die vom zugehörigen DBMS definiert werden. Informationen dazu, wie ein Treiber DBMS SQL-Typen den ODBC-definierten SQL-Typbezeichnern zuordnet und wie ein Treiber DBMS SQL-Typen seinen eigenen treiberspezifischen SQL-Typbezeichnern über einen Aufruf von SQLGetTypeInfo zuordnet. Ein Treiber gibt auch die SQL-Datentypen zurück, wenn die Datentypen von Spalten und Parametern durch Aufrufe von SQLColAttribute, SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns und SQLSpecialColumns beschrieben werden.

Hinweis

Die SQL-Datentypen sind in den Feldern SQL_DESC_CONCISE_TYPE, SQL_DESC_TYPE und SQL_DESC_DATETIME_INTERVAL_CODE der Implementierungsdeskriptoren enthalten. Merkmale der SQL-Datentypen sind in den Feldern SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH und SQL_DESC_OCTET_LENGTH der Implementierungsdeskriptoren enthalten. Weitere Informationen finden Sie weiter unten in diesem Anhang unter Datentypbezeichner und Deskriptoren .

Ein bestimmter Treiber und eine datenquelle unterstützen nicht unbedingt alle SQL-Datentypen, die in diesem Anhang definiert sind. Die Unterstützung eines Treibers für SQL-Datentypen hängt von der Sql-92-Ebene ab, die der Treiber erfüllt. Um die Vom Treiber unterstützte Grammatikebene von SQL-92 zu ermitteln, ruft eine Anwendung SQLGetInfo mit dem SQL_SQL_CONFORMANCE Informationstyp auf. Darüber hinaus kann ein bestimmter Treiber und eine datenquelle zusätzliche treiberspezifische SQL-Datentypen unterstützen. Um zu ermitteln, welche Datentypen ein Treiber unterstützt, ruft eine Anwendung SQLGetTypeInfo auf. Informationen zu treiberspezifischen SQL-Datentypen finden Sie in der Dokumentation des Treibers. Informationen zu den Datentypen in einer bestimmten Datenquelle finden Sie in der Dokumentation zu dieser Datenquelle.

Wichtig

Die Tabellen in diesem Anhang sind nur Richtlinien und zeigen in der Regel verwendete Namen, Bereiche und Grenzwerte von SQL-Datentypen an. Eine bestimmte Datenquelle unterstützt möglicherweise nur einige der aufgelisteten Datentypen, und die Merkmale der unterstützten Datentypen können sich von den aufgeführten unterscheiden.

In der folgenden Tabelle sind gültige SQL-Typbezeichner für alle SQL-Datentypen aufgeführt. In der Tabelle werden auch der Name und die Beschreibung des entsprechenden Datentyps aus SQL-92 (sofern vorhanden) aufgeführt.

SQL-Typbezeichner[1] Typische SQL-Daten

type[2]
Typische Typbeschreibung
SQL_CHAR CHAR(n) Zeichenfolge mit fester Zeichenfolgenlänge n.
SQL_VARCHAR VARCHAR(n) Zeichenfolge mit variabler Länge mit maximaler Zeichenfolgenlänge n.
SQL_LONGVARCHAR LONG VARCHAR Daten mit variabler Länge. Die maximale Länge ist vom Datenquellen abhängig. [9]
SQL_WCHAR WCHAR(n) Unicode-Zeichenzeichenfolge mit fester Zeichenfolgenlänge n
SQL_WVARCHAR VARWCHAR(n) Unicode-Zeichenfolge mit variabler Länge mit maximaler Zeichenfolgenlänge n
SQL_WLONGVARCHAR LONGWVARCHAR Unicode-Zeichendaten mit variabler Länge. Die maximale Länge ist datenquellenabhängig.
SQL_DECIMAL DEZIMAL(p;s) Signierter, exakter numerischer Wert mit einer Genauigkeit von mindestens p und Skalierungswerten . (Die maximale Genauigkeit ist treiberdefiniert.) (1 <= p<= 15; s<= p).[ 4]
SQL_NUMERIC NUMERIC(p,s) Signierter, exakter, numerischer Wert mit einer Genauigkeit p und Skalierung s (1 <= p<= 15; s<= p).[ 4]
SQL_SMALLINT SMALLINT Exakter numerischer Wert mit Genauigkeit 5 und Skalierung 0 (signiert: -32.768 <= n<= 32.767, nicht signiert: 0 <= n<= 65.535)[3].
SQL_INTEGER INTEGER Exakter numerischer Wert mit Genauigkeit 10 und Skalierung 0 (signiert: -2[31] <= n<= 2[31] - 1, nicht signiert: 0 <= n<= 2[32] - 1)[3].
SQL_REAL real Signierter, ungefährer numerischer Wert mit binärer Genauigkeit 24 (Null oder Absoluter Wert 10[-38] bis 10[38]).
SQL_FLOAT FLOAT(p) Signierter, ungefährer numerischer Wert mit binärer Genauigkeit von mindestens p. (Die maximale Genauigkeit ist vom Treiber definiert.) [5]
SQL_DOUBLE DOUBLE PRECISION Signierter, ungefährer numerischer Wert mit binärer Genauigkeit 53 (Null oder Absoluter Wert 10[-308] bis 10[308]).
SQL_BIT BIT Einzelbit-Binärdaten. [8]
SQL_TINYINT TINYINT Exakter numerischer Wert mit Genauigkeit 3 und Skalierung 0 (signiert: -128 <= n<= 127, nicht signiert: 0 <= n<= 255)[3].
SQL_BIGINT BIGINT Exakter numerischer Wert mit Genauigkeit 19 (wenn signiert) oder 20 (wenn nicht signiert) und Skalierung 0 (signiert: -2[63] <= n<= 2[63] - 1, nicht signiert: 0 <= n<= 2[64] - 1)[3],[9].
SQL_BINARY BINARY(n) Binäre Daten mit fester Länge n.[ 9]
SQL_VARBINARY VARBINARY(n) Binäre Daten mit variabler Länge von maximaler Länge n. Das Maximum wird vom Benutzer festgelegt. [9]
SQL_LONGVARBINARY LONG VARBINARY Binäre Daten mit variabler Länge. Die maximale Länge ist vom Datenquellen abhängig. [9]
SQL_TYPE_DATE[6] DATE Felder "Jahr", "Monat" und "Tag" entsprechen den Regeln des gregorianischen Kalenders. (Siehe Einschränkungen des gregorianischen Kalenders, später in diesem Anhang.)
SQL_TYPE_TIME[6] TIME(p) Stunden-, Minuten- und zweite Felder mit gültigen Werten für Stunden von 00 bis 23, gültige Werte für Minuten von 00 bis 59 und gültige Werte für Sekunden von 00 bis 61. Genauigkeit p gibt die Sekundengenauigkeit an.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Felder "Jahr", "Monat", "Tag", "Stunde", "Minute" und "Sekunde" mit gültigen Werten, die für die Datentypen DATE und TIME definiert sind.
SQL_TYPE_UTCDATETIME UTCDATETIME Felder "Jahr", "Monat", "Tag", "Stunde", "Minute", "Second", "Utchour" und "utcminute". Die Felder "Utchour" und "utcminute" weisen eine Genauigkeit von 1/10 Mikrosekunden auf.
SQL_TYPE_UTCTIME UTCTIME Felder "Stunde", "Minute", "Second", "Utchour" und "utcminute". Die Felder "Utchour" und "utcminute" weisen eine Genauigkeit von 1/10 Mikrosekunden auf.
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Anzahl der Monate zwischen zwei Datumsangaben; p ist die Intervallpräzision.
SQL_INTERVAL_YEAR[7] INTERVALLJAHR(p) Anzahl der Jahre zwischen zwei Datumsangaben; p ist die Intervallpräzision.
SQL_INTERVAL_YEAR_TO_MONTH[7] INTERVALL JAHR(p) BIS MONAT Anzahl der Jahre und Monate zwischen zwei Datumsangaben; p ist die Intervallpräzision.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Anzahl der Tage zwischen zwei Datumsangaben; p ist die Intervallpräzision.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Anzahl der Stunden zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Anzahl der Minuten zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Anzahl der Sekunden zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision, und q ist die Genauigkeit von Intervall sekunden.
SQL_INTERVAL_DAY_TO_HOUR[7] INTERVALLTAG(p) BIS STUNDE Anzahl der Tage/Stunden zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision.
SQL_INTERVAL_DAY_TO_MINUTE[7] INTERVAL DAY(p) TO MINUTE Anzahl der Tage/Stunden/Minuten zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision.
SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO SECOND(q) Anzahl der Tage/Stunden/Minuten/Sekunden zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision, und q ist die Genauigkeit von Intervall sekunden.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVAL HOUR(p) TO MINUTE Anzahl der Stunden/Minuten zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision.
SQL_INTERVAL_HOUR_TO_SECOND[7] INTERVAL HOUR(p) TO SECOND(q) Anzahl der Stunden/Minuten/Sekunden zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision, und q ist die Genauigkeit von Intervall sekunden.
SQL_INTERVAL_MINUTE_TO_SECOND[7] INTERVAL MINUTE(p) TO SECOND(q) Anzahl der Minuten/Sekunden zwischen zwei Datums-/Uhrzeiten; p ist die Intervallpräzision, und q ist die Genauigkeit von Intervall sekunden.
SQL_GUID GUID GUID mit fester Länge.

[1] Dies ist der Wert, der in der spalte DATA_TYPE durch einen Aufruf von SQLGetTypeInfo zurückgegeben wird.

[2] Dies ist der Wert, der in der Spalte NAME und CREATE PARAMS durch einen Aufruf von SQLGetTypeInfo zurückgegeben wird. Die SPALTE NAME gibt die Bezeichnung zurück, z. B. CHAR-, während die SPALTE CREATE PARAMS eine durch Trennzeichen getrennte Liste der Erstellungsparameter zurückgibt, z. B. Genauigkeit, Skalierung und Länge.

[3] Eine Anwendung verwendet SQLGetTypeInfo oder SQLColAttribute , um zu bestimmen, ob ein bestimmter Datentyp oder eine bestimmte Spalte in einem Resultset nicht signiert ist.

[4] SQL_DECIMAL- und SQL_NUMERIC Datentypen unterscheiden sich nur in ihrer Genauigkeit. Die Genauigkeit eines DECIMAL(p;s) ist eine implementierungsdezimale Dezimalgenauigkeit, die nicht kleiner als p ist, während die Genauigkeit einer ZAHL(p;s) genau gleich p ist.

[5] Je nach Implementierung kann die Genauigkeit von SQL_FLOAT entweder 24 oder 53 sein: Wenn es 24 ist, ist der SQL_FLOAT Datentyp identisch mit SQL_REAL; Wenn es 53 ist, ist der SQL_FLOAT Datentyp identisch mit SQL_DOUBLE.

[6] In ODBC 3.x sind die Datentypen SQL-Datum, Uhrzeit und Zeitstempel SQL_TYPE_DATE, SQL_TYPE_TIME bzw. SQL_TYPE_TIMESTAMP; in ODBC 2.x werden die Datentypen SQL_DATE, SQL_TIME und SQL_TIMESTAMP.

[7] Weitere Informationen zu den SQL-Datentypen für Intervalle finden Sie im Abschnitt "Intervalldatentypen " weiter unten in diesem Anhang.

[8] Der datentyp "SQL_BIT" weist unterschiedliche Merkmale auf als der BIT-Typ in SQL-92.

[9] Dieser Datentyp hat keinen entsprechenden Datentyp in SQL-92.

Dieser Abschnitt enthält das folgende Beispiel.