了解資料類型差異

下載 JDBC 驅動程式

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

字元類型

JDBC 字元字串資料類型為 CHAR、VARCHAR 與 LONGVARCHAR。 JDBC 驅動程式提供 JDBC 4.0 API 的支援。 在 JDBC 4.0 中,JDBC 字元字串資料類型也可以是 NCHAR、NVARCHAR 與 LONGNVARCHAR。 這些新的字元字串類型會以 Unicode 格式維護 Java 原生字元類型,並且移除執行任何 ANSI-to-Unicode 或 Unicode-to-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 (9.x) 開始,這些類型已被取代,因此您應該改用大型實值型別 varchar(max) 或 nvarchar(max)。

對 < 和 > 伺服器資料行使用 update數值類型 和 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 類型會對應為 JDBC 中的 VARBINARY 類型。
長 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 類型。
整數 JDBC INTEGER 類型代表帶符號的 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 money 和 smallmoney 類型,這是特定的固定有效位數十進位類型,分別以 8 個位元組和 4 個位元組儲存。

近似數值類型

JDBC 近似數值類型是 REAL、DOUBLE 與 FLOAT。

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

日期時間類型

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

注意

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

自訂類型對應

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