Share via


了解資料類型差異

下載 JDBC 驅動程式

Java 程式設計語言資料類型與 SQL Server 資料類型之間,存在一些差異。 Microsoft JDBC Driver for SQL Server 會透過各種類型的轉換,協助調解這些差異。

字元類型

JDBC 字元字串資料類型為 CHARVARCHARLONGVARCHAR。 JDBC 驅動程式提供 JDBC 4.0 API 的支援。 在 JDBC 4.0 中,JDBC 字元字串資料類型也可以是 NCHARNVARCHARLONGNVARCHAR。 這些新的字元字串類型會以 Unicode 格式維護 Java 原生字元類型,並且移除執行任何 ANSI-to-Unicode 或 Unicode-to-ANSI 轉換的需求。

類型 描述
Fixed-length SQL Server charnchar 資料類型會直接對應至 JDBC CHARNCHAR 類型。 這些是當資料行具有 SET ANSI_PADDING ON 時,由伺服器提供填補的固定長度類型。 nchar 一定會開啟填補;至於 char,當伺服器 char 資料行未開啟填補時,JDBC 驅動程式會新增填補。
Variable-length SQL Server varcharnvarchar 類型會分別直接對應至 JDBC VARCHARNVARCHAR 類型。
long SQL Server textntext 類型會分別對應至 JDBC LONGVARCHARLONGNVARCHAR 類型。 從 SQL Server 2005 (9.x) 開始,這些類型已被取代,因此您應該改用大型實值型別 varchar(max)nvarchar(max)

針對 textntext 伺服器資料行,使用 update<數值類型> 和 updateObject (int, java.lang.Object) 方法將會失敗。 不過,支援對 textntext 伺服器資料行使用 setObject 方法,並搭配指定的字元轉換類型。

二進位字串類型

JDBC 二進位字串類型為 BINARYVARBINARYLONGVARBINARY

類型 描述
Fixed-length SQL Server binary 類型會直接對應至 JDBC BINARY 類型。 這是當資料行具有 SET ANSI_PADDING ON 時,會由伺服器提供填補的固定長度類型。 當伺服器 char 資料行未開啟填補時,JDBC 驅動程式會加入填補。

SQL Server timestamp 類型是具有 8 個位元組固定長度的 JDBC BINARY 類型。
Variable-length SQL Server varbinary 類型會對應至 JDBC VARBINARY 類型。

SQL Server 中的 udt 類型會對應為 JDBC 中的 VARBINARY 類型。
long SQL Server image 類型會對應至 JDBC LONGVARBINARY 類型。 從 SQL Server 2005 (9.x) 開始,此類型已被取代,因此您應該改用大型實值型別 varbinary(max)

精確數值類型

JDBC 精確數值類型會直接對應到其相對應的 SQL Server 類型。

類型 描述
BIT JDBC BIT 類型代表可為 0 或 1 的單一位元。 這會對應至 SQL Server bit 類型。
TINYINT JDBC TINYINT 類型代表單一位元組。 這會對應至 SQL Server tinyint 類型。
SMALLINT JDBC SMALLINT 類型代表帶正負號的 16 位元整數。 這會對應至 SQL Server smallint 類型。
INTEGER JDBC SMALLINT 類型代表帶正負號的 32 位元整數。 這會對應至 SQL Server int 類型。
bigint JDBC BIGINT 類型代表帶正負號的 64 位元整數。 這會對應至 SQL Server bigint 類型。
NUMERIC JDBC NUMERIC 類型代表固定有效位數的十進位值,此值會保留相同的有效位數值。 NUMERIC 類型會對應至 SQL Server numeric 類型。
DECIMAL JDBC DECIMAL 類型代表固定有效位數的十進位值,此值至少會保留到所指定的有效位數。 DECIMAL 類型會對應至 SQL Server decimal 類型。

JDBC DECIMAL 類型也會對應至 SQL Server moneysmallmoney 類型,這是特定的固定有效位數十進位類型,分別以 8 個位元組和 4 個位元組儲存。

近似數值類型

JDBC 近似數值類型是 REALDOUBLEFLOAT

類型 描述
real JDBC REAL 類型具有 7 個位數的有效位數 (單精確度),並會直接對應至 SQL Server real 類型。
DOUBLE JDBC DOUBLE 類型具有 15 個位數的有效位數 (雙精確度),並會對應至 SQL Server float 類型。 JDBC FLOAT 類型是 DOUBLE 的同義字。 由於 FLOATDOUBLE 之間可能會產生混淆,因此偏好使用 DOUBLE

日期時間類型

JDBC TIMESTAMP 類型會對應至 SQL Server datetimesmalldatetime 類型。 datetime 類型會以兩個 4 位元組的整數儲存。 smalldatetime 類型會以兩個 2 位元組的小整數來保留相同的資訊 (日期和時間),但較不精確。

注意

SQL Server timestamp 類型是固定長度的二進位字串類型。 它不會對應到任何 JDBC 時間類型:DATETIMETIMESTAMP

自訂類型對應

JDBC 的自訂類型對應功能,此功能會將 SQLData 介面用於 JDBC 進階類型 (UDT、Struct 等), 而 JDBC 驅動程式中並未實作此功能。

另請參閱

了解 JDBC 驅動程式資料類型