Grundlegendes zu den Unterschieden von Datentypen
Es gibt eine Reihe von Unterschieden zwischen den Java-Datentypen und den SQL Server-Datentypen. Microsoft SQL Server JDBC Driver berücksichtigt diese Unterschiede durch verschiedenartige Konvertierungen.
Zeichentypen
Die JDBC-Datentypen für Zeichenfolgen lauten CHAR, VARCHAR und LONGVARCHAR. Ab Version 2.0 von Microsoft SQL Server JDBC Driver unterstützt der JDBC-Treiber die JDBC 4.0-API. In JDBC 4.0 sind auch NCHAR, NVARCHAR und LONGNVARCHAR als JDBC-Zeichenfolgentypen möglich. 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.
Typ | Beschreibung |
---|---|
Feste Länge |
Die SQL Server-Datentypen char und nchar entsprechen direkt den JDBC-Typen CHAR und NCHAR. 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-Typen varchar und nvarchar entsprechen direkt den JDBC-Typen VARCHAR bzw. NVARCHAR. |
Long |
Die SQL Server-Typen text und ntext entsprechen direkt den JDBC-Typen LONGVARCHAR bzw. LONGNVARCHAR. Diese Typen sind ab SQL Server 2005 veraltet, sodass Sie stattdessen die Typen mit umfangreichen Werten, varchar(max) oder nvarchar(max), verwenden sollten. Mit der update<Numeric Type>-Methode und der updateObject (int, java.lang.Object)-Methode treten bei text- und ntext-Serverspalten Fehler auf. Allerdings wird die Verwendung der setObject-Methode mit Angabe eines Zeichenkonvertierungstyps für text- und ntext-Serverspalten unterstützt. |
Binäre Zeichenfolgetypen
Die binären JDBC-Zeichenfolgentypen lauten BINARY, VARBINARY und LONGVARBINARY.
Typ | Beschreibung |
---|---|
Feste Länge |
Der SQL Server-Typ binary entspricht direkt dem JDBC-Typ BINARY. 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 entspricht dem JDBC-Typ VARBINARY. Der udt-Typ in SQL Server entspricht dem VARBINARY-Typ in JDBC. |
Long |
Der SQL Server-Typ image entspricht dem JDBC-Typ LONGVARBINARY. Dieser Typ ist ab SQL Server 2005 veraltet, sodass Sie stattdessen einen Typ mit umfangreichen Werten, d. h. varbinary(max), verwenden sollten. |
Exakte numerische Typen
Die exakten numerischen JDBC-Typen entsprechen direkt den entsprechenden SQL Server-Typen.
Typ | Beschreibung |
---|---|
BIT |
Der JDBC-Typ BIT stellt ein Bit dar, das 0 oder 1 sein kann. Entspricht dem SQL Server-Typ bit. |
TINYINT |
Der JDBC-Typ TINYINT stellt ein einzelnes Byte dar. Entspricht dem SQL Server-Typ tinyint. |
SMALLINT |
Der JDBC-Typ SMALLINT stellt eine 16-Bit-Ganzzahl mit Vorzeichen dar. Entspricht dem SQL Server-Typ smallint. |
INTEGER |
Der JDBC-Typ INTEGER stellt eine 32-Bit-Ganzzahl mit Vorzeichen dar. Entspricht dem SQL Server-Typ int. |
BIGINT |
Der JDBC-Typ BIGINT stellt eine 64-Bit-Ganzzahl mit Vorzeichen dar. Entspricht dem SQL Server-Typ bigint. |
NUMERIC |
Der JDBC-Typ NUMERIC stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit identischer Genauigkeit enthält. Der NUMERIC-Typ entspricht dem SQL Server-Typ numeric. |
DECIMAL |
Der JDBC-Typ DECIMAL stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit mindestens der angegebenen Genauigkeit enthält. Der DECIMAL-Typ ist dem SQL Server-Typ decimal zugeordnet. Der JDBC-Typ DECIMAL entspricht außerdem den SQL Server-Typen money und smallmoney. Dabei handelt es sich um spezielle Dezimaltypen 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.
Typ | Beschreibung |
---|---|
REAL |
Der JDBC-Typ REAL weist sieben Ziffern für die Genauigkeit auf (einfache Genauigkeit) und entspricht dem SQL Server-Typ real. |
DOUBLE |
Der JDBC-Typ DOUBLE weist 15 Ziffern für die Genauigkeit auf (doppelte Genauigkeit) und entspricht dem SQL Server-Typ float. Bei dem JDBC-Typ FLOAT handelt es sich um ein Synonym für DOUBLE. Um Verwechslungen zwischen FLOAT und DOUBLE zu vermeiden, sollte vorzugsweise DOUBLE verwendet werden. |
Datum-/Zeittypen
Der JDBC-Typ TIMESTAMP entspricht den SQL Server-Typen datetime und smalldatetime. Der datetime-Typ wird in zwei integer-Werten mit einer Länge von 4 Byte gespeichert. Der smalldatetime-Typ enthält die gleichen Informationen (Datum und Uhrzeit), allerdings mit geringerer Genauigkeit in zwei integer-Werten mit einer Länge von 2 Byte.
Hinweis
Bei dem SQL Server-Typ timestamp handelt es sich um einen binären Zeichenfolgetyp mit fester Länge. Er entspricht keinem der JDBC-Typen DATE, TIME oder TIMESTAMP.
Benutzerdefinierte Typzuordnung
Die Zuordnungsfunktion für benutzerdefinierte Typen von JDBC, das die SQLData-Schnittstellen für die erweiterten JDBC-Typen (UDTs, Struct usw.) verwendet, ist im JDBC-Treiber nicht implementiert.