了解資料類型差異
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 轉換的需求。
類型 | 描述 |
---|---|
Fixed-length | SQL Server char 和 nchar 資料類型會直接對應至 JDBC CHAR 和 NCHAR 類型。 這些是當資料行具有 SET ANSI_PADDING ON 時,由伺服器提供填補的固定長度類型。 nchar 一定會開啟填補;至於 char,當伺服器 char 資料行未開啟填補時,JDBC 驅動程式會新增填補。 |
Variable-length | 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<數值類型> 和 updateObject (int, java.lang.Object) 方法將會失敗。 不過,支援對 text 和 ntext 伺服器資料行使用 setObject 方法,並搭配指定的字元轉換類型。 |
二進位字串類型
JDBC 二進位字串類型為 BINARY、VARBINARY 與 LONGVARBINARY。
類型 | 描述 |
---|---|
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 money 和 smallmoney 類型,這是特定的固定有效位數十進位類型,分別以 8 個位元組和 4 個位元組儲存。 |
近似數值類型
JDBC 近似數值類型是 REAL、DOUBLE 與 FLOAT。
類型 | 描述 |
---|---|
real | JDBC REAL 類型具有 7 個位數的有效位數 (單精確度),並會直接對應至 SQL Server real 類型。 |
DOUBLE | 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 驅動程式中並未實作此功能。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應