資料庫 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 整數資料
資料型別 | 位元組 | 資料範圍 |
---|---|---|
Tinyint | 1 位元組 (Byte) | 0 ~ 255 |
Smallint | 2 位元組 (Byte) | -2^15 (-32,768) 到 2^15-1 (32,767) |
Int | 4 位元組 (Byte) | -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) |
Bigint | 8 位元組 (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 資料類型。 |
Bit | 1 位元組 (Byte) | 0 , 1 , Null 字串值 True 和 False 可以轉換成 bit 值 True 轉換成 1 False 轉換成 0。 |
Float 精確位數與浮點數
資料型別 | 位元組 | 資料範圍 |
---|---|---|
float | 8 位元組 (Byte) | -1.79E+308 到 -2.23E-308、0 2.23E-308 到 1.79E+308 |
real | 4 位元組 (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 ~ 9 | 5 位元組 (Byte) | |
10 ~ 19 | 9 位元組 (Byte) | |
20 ~ 28 | 13 位元組 (Byte) | |
29 ~ 38 | 17 位元組 (Byte) |
字元、字串 - Unicode 字串
資料型別 | 位元組 | 資料範圍 |
---|---|---|
char(n) | 1字元 1 位元組 (Byte) | 1 ~ 8000 字元 |
varchar(n) | 1字元 1 位元組 (Byte) | 1 ~ 8000 字元 |
varchar(max) | 變動長度 max = 2GB | 1 ~ 2^31 -1 字元 |
text | 變動長度 max = 2GB | 1 ~ 2^31 -1 字元 |
Unicode 字串
nchar(n) | 1字元 2 位元組 (Byte) | 1 ~ 4000 字元 固定長度 |
nvarchar(n) | 1字元 2Byte | 1 ~ 4000 字元 可變長度 |
nvarchar(max) | 1字元 2 位元組 (Byte) 變動長度 max = 2GB | 1 ~ 2^ -1 字元 (可變長度大型文字資料) |
ntext | 1字元 2 位元組 (Byte) 變動長度 max = 2GB | 1 ~ 2^30 -1 字元 |
Binary 二進位字串
資料型別 | 位元組 | 資料範圍 |
---|---|---|
binary(n) | 固定長度 8000 Bytes | 1 ~ 8000 Bytes (儲存體大小是 n 位元組) |
varbinary(n) | 變動長度 | 1 ~ 8000 Bytes |
varbinary(max) | 變動長度 max = 2GB | 1 ~ 2^31 -1 Bytes (儲存體大小是輸入資料的實際長度再加上 2 位元組) |
image | 變動長度 max = 2GB | 0 到 2^31-1 (2,147,483,647) 位元組的可變長度二進位資料 |
日期 - 時間 - 貨幣 - Timestamp
資料型別 | 位元組 | 資料範圍 |
---|---|---|
datetime | 8 位元組(字元長度最小 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 |
smalldatetime | 4 位元組 (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 金融貨幣/精確數值
money | 8 位元組 (Byte) | -2^63 ~ 2^63 -1 小數4位 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 |
smallmoney | 4 位元組 (Byte) | -2^31 ~ 2^31 -1 小數4位 -214,748.3648 到 214,748.3647 |
Timestamp 時間戳記
timestamp | 8 位元組 (Byte) | 8 Bytes 的 16 進位值 |
uniqueidentifier | 16 位元組 (Byte) | 16 Bytes 的 16 進位值 |
Timestamp 通常用來作為版本戳記資料表資料列的機制。儲存體大小是 8 位元組。timestamp 資料類型只是會遞增的數字,因此不會保留日期或時間。記錄日期或時間建議使用 datetime 資料類型。Timestamp 是 Rowversion 資料類型的同義字依照資料類型相同。
資料類型 (Transact-SQL)
docs.microsoft.com 資料類型
備註 MySQL 16777215 資料欄位溢位的錯誤訊息。
MySQL 出現 Duplicate entry 16777215 for key PRIMARY 錯誤訊息、為資料欄位溢位的錯誤訊息。資料表的主要鍵值 PRIMARY Key 設定的資料型態長度過小,當資料量大過於該長度時就會顯示錯誤訊息。可以使用 MySQL 資料管理界面,將該資料表的 PRIMARY Key 欄位更改欄位屬性如:int、或 bigint 來解決。