データ型の違いについて
Java プログラミング言語のデータ型と SQL Server のデータ型には、異なる点が多数あります。Microsoft SQL Server JDBC Driver では、さまざまな型の変換を行うことによって、これらの違いに対応しています。
文字型
JDBC の文字列データ型は、CHAR、VARCHAR、および LONGVARCHAR です。Microsoft SQL Server JDBC Driver Version 2.0 以降では、JDBC 4.0 API がサポートされます。JDBC 4.0 では、JDBC の文字列データ型として、NCHAR、NVARCHAR、および LONGNVARCHAR も使用できます。これらの新しい文字列型では Java のネイティブの文字型が Unicode 形式で維持されるため、ANSI から Unicode への変換または Unicode から ANSI への変換を実行する必要がありません。
種類 | 説明 |
---|---|
固定長 |
SQL Server の char データ型および nchar データ型は、JDBC の CHAR 型および NCHAR 型に直接マップされます。列が SET ANSI_PADDING ON の場合、これらはサーバーが埋め込みを行う固定長の型です。埋め込みは nchar に対しては常にオンですが、char に対しては、サーバーにより char 列の埋め込みが行われていない場合は、JDBC ドライバーが埋め込みを行います。 |
可変長 |
SQL Server の varchar 型および nvarchar 型は、JDBC の VARCHAR 型および NVARCHAR 型に直接マップされます。 |
長いデータ型 |
SQL Server の text 型および ntext 型は、それぞれ、JDBC の LONGVARCHAR 型および LONGNVARCHAR 型にマップされます。これらの型は SQL Server 2005 および SQL Server 2008 では推奨されていないため、代わりに大きな値の型である varchar(max) または nvarchar(max) を使用する必要があります。 サーバーの text 列と ntext 列に対して update<Numeric Type> メソッドと updateObject (int, java.lang.Object) メソッドを使用すると、エラーになります。ただし、サーバーの text 列と ntext 列に対して、文字変換の型を指定して setObject メソッドを使用することは可能です。 |
バイナリ文字列型
JDBC のバイナリ文字列型は、BINARY、VARBINARY、および LONGVARBINARY です。
種類 | 説明 |
---|---|
固定長 |
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 にマップされます。 |
長いデータ型 |
SQL Server の image 型は JDBC の LONGVARBINARY 型にマップされます。この型は SQL Server 2005 および SQL Server 2008 では推奨されていないため、代わりに大きな値の型である varbinary(max) を使用する必要があります。 |
真数型
JDBC の真数型は、対応する SQL Server 型に直接マップされます。
種類 | 説明 |
---|---|
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 の概数型は、REAL、DOUBLE、および FLOAT です。
種類 | 説明 |
---|---|
REAL |
JDBC の REAL 型の有効桁数は 7 桁 (単精度) で、SQL Server の real 型に直接マップされます。 |
DOUBLE |
JDBC の DOUBLE 型の有効桁数は 15 桁 (倍精度) で、SQL Server の float 型にマップされます。JDBC の FLOAT 型は DOUBLE と同義です。FLOAT と DOUBLE は間違いやすいため、DOUBLE の使用をお勧めします。 |
Datetime 型
JDBC の TIMESTAMP 型は、SQL Server の datetime 型および smalldatetime 型にマップされます。datetime 型は、2 つの 4 バイト整数に格納されます。smalldatetime 型は同じ情報 (日付と時刻) を保持しますが、精度が低く、2 つの 2 バイトの smallint に格納されます。
メモ : |
---|
SQL Server の timestamp 型は、固定長のバイナリ文字列型です。これは、JDBC の時刻型 (DATE、TIME、または TIMESTAMP) のいずれにもマップされません。 |
カスタム型のマッピング
JDBC の高度な型 (UDT、Struct など) に対応した SQLData インターフェイスを使用するカスタム型のマッピング機能は、JDBC ドライバーに実装されていません。