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 驅動程式中並未實作此功能。