Grundlegendes zu den Unterschieden von Datentypen
Es gibt eine Reihe von Unterschieden zwischen den Java-Datentypen und den SQL Server-Datentypen. Microsoft JDBC-Treiber für SQL Server berücksichtigt diese Unterschiede durch verschiedenartige Konvertierungen.
Zeichentypen
Die JDBC-Datentypen für Zeichenfolgen sind CHAR, VARCHAR und LONGVARCHAR. Der JDBC-Treiber unterstützt die JDBC 4.0-API. In JDBC 4.0 kann es sich bei den JDBC-Datentypen für Zeichenfolgen auch um NCHAR, NVARCHAR and LONGNVARCHAR handeln. Diese neuen Zeichenfolgentypen verwalten die systemeigenen Java-Zeichentypen im Unicode-Format, sodass keine Konvertierung von ANSI nach Unicode und Unicode nach ANSI mehr erforderlich ist.
type | BESCHREIBUNG |
---|---|
Feste Länge | Die SQL Server-Datentypen char und nchar lassen sich direkt den JDBC-Datentypen CHAR bzw. NCHAR zuordnen. Diese Typen weisen eine feste Länge auf und werden vom Server mit Leerstellen aufgefüllt, wenn für die Spalte SET ANSI_PADDING ON festgelegt wurde. Die Auffüllung mit Leerstellen ist für nchar immer aktiviert. Bei char fügt der JDBC-Treiber die Leerstellen jedoch nur hinzu, wenn die char-Spalten des Servers nicht aufgefüllt wurden. |
Variable Länge | Die SQL Server-Datentypen varchar und nvarchar lassen sich direkt den JDBC-Datentypen VARCHAR bzw. NVARCHAR zuordnen. |
Long | Die SQL Server-Typen text und ntext lassen sich den JDBC-Typen LONGVARCHAR bzw. LONGNVARCHAR zuordnen. Diese Typen sind seit SQL Server 2005 (9.x) veraltet, daher sollten Sie stattdessen die Typen mit Unterstützung für umfangreiche Werte wie varchar(max) oder nvarchar(max) verwenden. Bei Verwendung der Methoden <updateNumeric Type> und updateObject (int, java.lang.Object) treten bei text- und ntext-Serverspalten Fehler auf. Allerdings wird die Verwendung der Methode setObject mit Angabe eines Zeichenkonvertierungstyps für text- und ntext-Serverspalten unterstützt. |
Binäre Zeichenfolgetypen
Die JDBC-Datentypen für Binärzeichenfolgen sind BINARY, VARBINARY und LONGVARBINARY.
type | BESCHREIBUNG |
---|---|
Feste Länge | Der SQL Server-Typ binary lässt sich direkt dem JDBC-Typ BINARY zuordnen. Dieser Typ weist eine feste Länge auf und wird vom Server mit Leerstellen aufgefüllt, wenn für die Spalte SET ANSI_PADDING ON eingestellt wurde. Wenn die Zeichenspalten des Servers nicht mit Leerstellen aufgefüllt sind, fügt der JDBC-Treiber die Leerstellen hinzu. Bei dem SQL Server-Typ timestamp handelt es sich um einen JDBC-BINARY-Typ mit einer festen Länge von 8 Bytes. |
Variable Länge | Der SQL Server-Typ varbinary lässt sich dem JDBC-Typ VARBINARY zuordnen. Der udt-Typ in SQL Server lässt sich in JDBC als VARBINARY-Typ zuordnen. |
Long | Der SQL Server-Typ image lässt sich dem JDBC-Typ LONGVARBINARY zuordnen. Da dieser Typ ab SQL Server 2005 (9.x) veraltet ist, sollten Sie stattdessen einen Typ mit umfangreichen Werten, d.h. varbinary(max) , verwenden. |
Exakte numerische Typen
Die exakten numerischen JDBC-Typen sind direkt den entsprechenden SQL Server-Typen zugeordnet.
type | BESCHREIBUNG |
---|---|
BIT | Der JDBC-Typ BIT stellt ein Einzelbit dar, das 0 oder 1 sein kann. Dieser Typ lässt sich einem SQL Server-Typ bit zuordnen. |
TINYINT | Der JDBC-Typ TINYINT stellt ein einzelnes Byte dar. Dieser Typ lässt sich einem SQL Server-Typ tinyint zuordnen. |
SMALLINT | Der JDBC-Typ SMALLINT stellt eine 16-Bit-Ganzzahl mit Vorzeichen dar. Dieser Typ lässt sich einem SQL Server-Typ smallint zuordnen. |
INTEGER | Der JDBC-Typ INTEGER stellt eine 32-Bit-Ganzzahl mit Vorzeichen dar. Dieser Typ lässt sich einem SQL Server-Typ int zuordnen. |
bigint | Der JDBC-Typ BIGINT stellt eine 64-Bit-Ganzzahl mit Vorzeichen dar. Dieser Typ lässt sich einem SQL Server-Typ bigint zuordnen. |
NUMERIC | Der JDBC-Typ NUMERIC stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit identischer Genauigkeit enthält. Der Typ NUMERIC lässt sich dem SQL Server-Typ numeric zuordnen. |
DECIMAL | Der JDBC-Typ DECIMAL stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit mindestens der angegebenen Genauigkeit enthält. Der Typ DECIMAL lässt sich dem SQL Server-Typ decimal zuordnen. Der JDBC-Typ DECIMAL lässt sich außerdem den SQL Server-Typen money und smallmoney zuordnen. Dabei handelt es sich um spezielle Dezimaltypen mit fester Genauigkeit, die in 8 bzw. 4 Bytes gespeichert werden. |
Angenäherte numerische Typen
Die angenäherten numerischen JDBC-Typen lauten REAL, DOUBLE und FLOAT.
type | BESCHREIBUNG |
---|---|
real | Der JDBC-Typ REAL weist sieben Stellen für die Genauigkeit auf (einfache Genauigkeit) und lässt sich direkt dem SQL Server-Typ real zuordnen. |
Double | Der JDBC-Typ DOUBLE weist 15 Stellen für die Genauigkeit auf (doppelte Genauigkeit) und ist dem SQL Server-Typ float zugeordnet. Der JDBC-Typ FLOAT ist ein Synonym von DOUBLE. Um Verwechslungen zwischen FLOAT und DOUBLE zu vermeiden, sollte vorzugsweise DOUBLE verwendet werden. |
Datum-/Zeittypen
Der JDBC-Typ TIMESTAMP lässt sich den SQL Server-Typen datetime und smalldatetime zuordnen. Der Typ datetime wird in zwei ganzzahligen Werten mit der Länge 4 Byte gespeichert. Der Typ smalldatetime enthält die gleichen Informationen (Datum und Uhrzeit), allerdings mit geringerer Genauigkeit in zwei Integer-Werten mit der Länge 2 Byte.
Hinweis
Der SQL Server-Typ timestamp ist ein Binärzeichenfolgentyp mit fester Länge. Er lässt sich keinem der time-Typen in JDBC zuordnen: DATE, TIME oder TIMESTAMP.
Benutzerdefinierte Typzuordnung
Die Zuordnungsfunktion für benutzerdefinierte Typen von JDBC, die die SQLData-Schnittstellen für die erweiterten JDBC-Typen (UDTs, Struct usw.) verwendet, ist im JDBC-Treiber nicht implementiert.