データ型の違いについて

JDBC ドライバーのダウンロード

Java プログラミング言語のデータ型と SQL Server のデータ型には、異なる点が多数あります。 SQL Server 用 Microsoft JDBC ドライバー では、さまざまな型の変換を行うことによって、これらの違いに対応しています。

文字型

JDBC 文字列のデータ型は、CHARVARCHAR、および LONGVARCHAR です。 JDBC ドライバーでは、JDBC 4.0 API がサポートされます。 JDBC 4.0 では、JDBC の文字列データ型として、NCHARNVARCHAR、および LONGNVARCHAR も使用できます。 これらの新しい文字列型では Java のネイティブの文字型が Unicode 形式で維持されるため、ANSI から Unicode への変換または Unicode から ANSI への変換を実行する必要がありません。

Type 説明
固定長 SQL Server の char 型と nchar データ型は、JDBC の CHAR 型と NCHAR 型に直接マップされます。 列が SET ANSI_PADDING ON の場合、このサーバーが埋め込みを行う固定長の型です。 埋め込みは nchar に対しては常にオンですが、char に対しては、サーバーにより char 列の埋め込みが行われていない場合は、JDBC ドライバーが埋め込みを行います。
可変長 SQL Server の varchar 型と nvarchar 型は、それぞれ JDBC の VARCHAR 型と NVARCHAR 型に直接マップされます。
Long SQL Server の text 型と ntext 型は、それぞれ JDBC の LONGVARCHAR 型と LONGNVARCHAR 型にマップされます。 これらの型は SQL Server 2005 (9.x) 以降では非推奨とされるため、代わりに大きな値の型である varchar(max) または nvarchar(max) を使用する必要があります。

サーバーの text 列と ntext 列に対して update<Numeric Type> メソッドと updateObject (int, java.lang.Object) メソッドを使用すると、エラーになります。 ただし、サーバーの text 列と ntext 列に対して、文字変換の型を指定して setObject メソッドを使用することは可能です。

バイナリ文字列型

JDBC バイナリ文字列型は BINARYVARBINARY、および LONGVARBINARY です。

Type 説明
固定長 SQL Server の binary 型は、JDBC BINARY 型に直接マップされます。 列が SET ANSI_PADDING ON の場合、これはサーバーが埋め込みを行う固定長の型です。 サーバーの char 列に埋め込みが行われていない場合は、JDBC ドライバーが埋め込みを行います。

SQL Server の timestamp 型は、固定長 8 バイトの JDBC の BINARY 型です。
可変長 SQL Server の varbinary 型は、JDBC VARBINARY 型にマップされます。

SQL Server では udt 型は、VARBINARY 型として JDBC にマップされます。
Long SQL Server の image 型は、JDBC の LONGVARBINARY 型にマップされます。 この型は SQL Server 2005 (9.x) 以降では非推奨とされるため、代わりに大きな値の型である varbinary(max) を使用する必要があります。

真数型

JDBC の真数型は、対応する SQL Server 型に直接マップされます。

Type 説明
BIT JDBC の BIT 型は、0 または 1 の単一ビットを表します。 これは、SQL Server の bit 型にマップされます。
TINYINT JDBC の TINYINT 型は、1 バイトを表します。 これは、SQL Server の tinyint 型にマップされます。
SMALLINT JDBC の SMALLINT 型は、符号付きの 16 ビット整数を表します。 これは、SQL Server の smallint 型にマップされます。
INTEGER JDBC の INTEGER 型は、符号付きの 32 ビット整数を表します。 これは、SQL Server の int 型にマップされます。
bigint JDBC の BIGINT 型は、符号付きの 64 ビット整数を表します。 これは、SQL Server の bigint 型にマップされます。
NUMERIC JDBC の NUMERIC 型は、同一有効桁数の値を保持する固定長の有効桁数の 10 進値を表します。 NUMERIC 型は SQL Server の numeric 型にマップされます。
DECIMAL JDBC の DECIMAL 型は、指定された有効桁数以上の値を保持する固定長の有効桁数の 10 進値を表します。 Decimal 型は、SQL Server の decimal 型にマップされます。

JDBC の DECIMAL 型は、SQL Server の money 型と smallmoney 型にもマップされます。これらはそれぞれ、8 バイトと 4 バイトで格納される固定長の有効桁数の decimal 型です。

概数型

JDBC の概数型は、REALDOUBLE、および FLOAT です。

Type 説明
real JDBC の REAL 型の有効桁数は 7 桁 (単精度) で、SQL Server の real 型に直接マップされます。
DOUBLE JDBC の DOUBLE 型の有効桁数は 15 桁 (倍精度) で、SQL Server の float 型にマップされます。 JDBC の FLOAT 型は DOUBLE のシノニムです。 FLOATDOUBLE は間違いやすいため、DOUBLE の使用をお勧めします。

Datetime 型

JDBC の TIMESTAMP 型は、SQL Server の datetime 型および smalldatetime 型にマップされます。 datetime 型は、2 つの 4 バイト整数に格納されます。 smalldatetime 型は同じ情報 (日付と時刻) を保持しますが、精度が低く、2 つの 2 バイトの小整数に格納されます。

Note

SQL Server の timestamp 型は、固定長のバイナリ文字列型です。 これは、JDBC の次の時刻型のいずれにもマップされません。DATETIME、または TIMESTAMP

カスタム型のマッピング

JDBC の高度な型 (UDT、Struct など) に対応した SQLData インターフェイスを使用するカスタム型のマッピング機能は、 JDBC ドライバーに実装されていません。

関連項目

JDBC ドライバーのデータ型について