資料庫 SQL Data Types 資料型別

資料庫型別是指定物件所能保留之資料類型的屬性 SQL Server 提供系統資料型別,定義可與 SQL Server 搭配使用的所有資料類型。也可以在 Transact-SQL 或 Microsoft .NET Framework 中定義自己的資料型別。系統資料型別可以分為例如整數、字元、日期和時間等。選擇合適的資料型別可以提高資料庫的效能。在建立資料表或變數時,須指定每個欄位或變數的資料類型,並根據需要設定長度、精確度或小數位數等參數。SQL Server (Transact-SQL) 基本幾種資料型別,資料類型指定物件所能保留之資料類型的屬性。類型包括精確位數用於儲存整數或固定小數位數的數值、整數、浮點數、Unicode 字元字串中文、日文或阿拉伯文、varchar 文字或字元資料、Timestamp 日期和時間資料、金融貨幣精確數值資料、二進位字串用於儲存二進位格式的資料,例如圖片、文件或加密金鑰等等。

數值資料 (Numeric Data)

數值型態有 integer, float, money 使用數值資料能夠搭配內建的數值函數來做資料處理該數值欄位。

字串(元)資料 (Character & Strings Data)

儲存字元或符號之資料型別。

日期/時間資料 (Date Data)

記錄日期/時間的資料型別,類型 Date, Time, Timestamp

布林值 (Boolean Data)

True、False, Yes、No, 1、0



Integer 整數資料

資料型別位元組資料範圍
Tinyint1 位元組 (Byte)0 ~ 255
Smallint2 位元組 (Byte)-2^15 (-32,768) 到 2^15-1 (32,767)
Int4 位元組 (Byte)-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)
Bigint8 位元組 (Byte)-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)
大於 2,147,483,647 的整數常數會轉換
decimal 資料類型,而不是 bigint 資料類型。
Bit1 位元組 (Byte)0 , 1 , Null
字串值 True 和 False 可以轉換成 bit 值
True 轉換成 1
False 轉換成 0。


Float 精確位數與浮點數

資料型別位元組資料範圍
float8 位元組 (Byte)-1.79E+308 到 -2.23E-308、0
2.23E-308 到 1.79E+308
real4 位元組 (Byte)-3.40E+38 到 -1.18E-38、0
1.18E-38 到 3.40E+38
numeric(有效位數, 小數)視精確度而定-10^38 +1 ~ 10^38 -1
decimal(有效位數, 小數)視精確度而定-10^38 +1 ~ 10^38 -1
numeric, decimal
(具有固定有效位數和小數位數的數值資料類型)
有效位數儲存體
1 ~ 95 位元組 (Byte)
10 ~ 199 位元組 (Byte)
20 ~ 2813 位元組 (Byte)
29 ~ 3817 位元組 (Byte)


字元、字串 - Unicode 字串

資料型別位元組資料範圍
char(n)1字元 1 位元組 (Byte)1 ~ 8000 字元
varchar(n)1字元 1 位元組 (Byte)1 ~ 8000 字元
varchar(max)變動長度 max = 2GB1 ~ 2^31 -1 字元
text變動長度 max = 2GB1 ~ 2^31 -1 字元

Unicode 字串

nchar(n)1字元 2 位元組 (Byte)1 ~ 4000 字元 固定長度
nvarchar(n)1字元 2Byte1 ~ 4000 字元 可變長度
nvarchar(max)1字元 2 位元組 (Byte)
變動長度 max = 2GB
1 ~ 2^ -1 字元 (可變長度大型文字資料)
ntext1字元 2 位元組 (Byte)
變動長度 max = 2GB
1 ~ 2^30 -1 字元


Binary 二進位字串

資料型別位元組資料範圍
binary(n)固定長度 8000 Bytes1 ~ 8000 Bytes (儲存體大小是 n 位元組)
varbinary(n)變動長度1 ~ 8000 Bytes
varbinary(max)變動長度 max = 2GB1 ~ 2^31 -1 Bytes
(儲存體大小是輸入資料的實際長度再加上 2 位元組)
image變動長度 max = 2GB0 到 2^31-1 (2,147,483,647)
位元組的可變長度二進位資料


日期 - 時間 - 貨幣 - Timestamp

資料型別位元組資料範圍
datetime8 位元組(字元長度最小 19 個位置,最大 23 個位置)1753 年 1 月 1 日到 9999 年 12 月 31 日
時間範圍 00:00:00 到 23:59:59.997
2012-06-30 06:30:02.612
datetime2(n) 6 個位元組代表有效位數小於 3,而 7 個位元組則代表有效位數是 3 和 4。所有其他有效位數則需要 8 個位元組西元 1 年 1 月 1 日到西元 9999 年 12 月 31 日
時間範圍 00:00:00 到 23:59:59.9999999
2012-06-30 06:30:02.612
smalldatetime4 位元組 (Byte) 1900:01:01 到 2079:06:06
1900 年 1 月 1 日到 2079 年 6 月 6 日
2012-09-23 17:23
datetimeoffset(n)*10 Bytes (固定)預設值
最小 26 位數
(YYYY-MM-DD hh:mm:ss {+|-}hh:mm)
最大 34 位數
(YYYY-MM-DD hh:mm:ss. nnnnnnn {+|-}hh:mm)
0001-01-01 到 9999-12-31
西元 1 年 1 月 1 日 到西元 9999 年 12 月 31 日

SQL Server 資料庫引擎使用兩個 4 位元組的整數內部存儲 datetime 資料類型的值。
第一個 4 位元組存儲「基礎日期」即 1900 年 1 月 1 日、之前或之後的天數。基礎日期是系統參照日期。
另外一個 4 位元組存儲天的時間,以午夜後經過的 1/300 秒數表示。

smalldatetime 資料類型存儲天的日期和時間,但精確度低於 datetime。
資料庫引擎將 smalldatetime 值存儲為兩個 2 位元組的整數。第一個 2 位元組存儲 1900 年 1 月 1 日後的天數。
另外一個 2 位元組存儲午夜後經過的分鐘數。



Money 金融貨幣/精確數值

money8 位元組 (Byte)-2^63 ~ 2^63 -1 小數4位
-922,337,203,685,477.5808 到 922,337,203,685,477.5807
smallmoney4 位元組 (Byte)-2^31 ~ 2^31 -1 小數4位
-214,748.3648 到 214,748.3647

Timestamp 時間戳記

timestamp8 位元組 (Byte)8 Bytes 的 16 進位值
uniqueidentifier16 位元組 (Byte)16 Bytes 的 16 進位值

Timestamp 通常用來作為版本戳記資料表資料列的機制。儲存體大小是 8 位元組。timestamp 資料類型只是會遞增的數字,因此不會保留日期或時間。記錄日期或時間建議使用 datetime 資料類型。TimestampRowversion 資料類型的同義字依照資料類型相同。


資料類型 (Transact-SQL)

docs.microsoft.com 資料類型



備註 MySQL 16777215 資料欄位溢位的錯誤訊息。

MySQL 出現 Duplicate entry 16777215 for key PRIMARY 錯誤訊息、為資料欄位溢位的錯誤訊息。資料表的主要鍵值 PRIMARY Key 設定的資料型態長度過小,當資料量大過於該長度時就會顯示錯誤訊息。可以使用 MySQL 資料管理界面,將該資料表的 PRIMARY Key 欄位更改欄位屬性如:int、或 bigint 來解決。