iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
2
Software Development

以資料庫為開發核心,利用通用 API 玩轉後端資料存取的概念與實作系列 第 12

Day12:常用的資料庫資料型態

在說明各資料庫的SQL語法前,還是必須先來談談各資料庫提供的欄位型態,關聯式資料庫儲存資料時會將資料存放在Table中,Talbe再新增多個欄位,而每個欄位都會再依資料的內容分為多個不同的類型,而所謂資料類型是指定物件所能保留之資料類型的屬性。

類型包括整數、精確位數、浮點數、字元、貨幣資料、日期和時間資料、二進位字串等。一般分為四大類,不同的資料庫程式多少都會有點差異,而且版本升級時可能也會變更,以下僅列出較常使用的類型供參考。

  • 數值資料 (Numeric Data)

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

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

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

  • 日期/時間資料 (Date Data)

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

  • 布林值 (Boolean Data)

True、False, Yes、No, 1、0

以下就表列出 MS-SQL 的常用資料類型及每個型態的描述說明,不同的資料庫會有些許的差異,希望能幫助您更容易理解不同資料庫的欄位資料類型差異。

MS SQL Server 常用資料類型

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

資料類型 描述
char(n) 固定長度的字串。最多 4,000 個字元。
varchar(n) 可變長度的字串。最多 4,000 個字元。
varchar(max) 可變長度的字串。最多 1,073,741,824 個字元。
text 可變長度的字串。最多 2GB 字元資料。

Unicode 字串:

資料類型 描述
nchar(n) 固定長度的 Unicode 資料。最多 4,000 個字元。
nvarchar(n) 可變長度的 Unicode 數據。最多 4,000 個字元。
nvarchar(max) 可變長度的 Unicode 數據。最多 536,870,912 個字元。
ntext 可變長度的 Unicode 數據。最多 2GB 字元資料。

Number 類型:

資料類型 描述 存儲
smallint 允許從 -32,768 到 32,767 的所有數字。 2 位元組
int 允許從 -2,147,483,648 到 2,147,483,647 的所有數字。 4 位元組
bigint 允許介於 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間的所有數字。 8 位元組
decimal(p,s) 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 間的數字。p 參數指示可以存儲的最大位元數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位元數。s 必須是 0 到 p 之間的值。默認是 0。 5-17 位元
float(n) 從 -1.79E + 308 到 1.79E + 308 的浮動精度數位資料。 4 位元組還是 8 位元組。

Date 類型:

資料類型 描述 存儲
datetime 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 3.33 毫秒。 8 bytes
datetime2 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 100 納秒。 6-8 bytes
smalldatetime 從 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度為 1 分鐘。 4 bytes
date 僅存儲日期。從 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
time 僅存儲時間。精度為 100 納秒。 3-5 bytes

Binary 類型:

資料類型 描述
varbinary(n) 可變長度的二進位資料。最多 8,000 位元組。
varbinary(max) 可變長度的二進位資料。最多 2GB 位元組。
image 可變長度的二進位資料。最多 2GB。

MySQL(MariaDB) 常用資料類型

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

資料類型 描述
char(n) 固定長度的字串。最多 255 個字元。
varchar(n) 可變長度的字串。最多 65,535 個字元。
Text 可變長度的字串。最多 2^16 - 1 字元資料。

Unicode 字串:

資料類型 描述
nchar(n) 固定長度的 Unicode 資料。同char(n) CHARSET utf8。
nvarchar(n) 可變長度的 Unicode 數據。同varchar(n) CHARSET utf8。
ntext 可變長度的 Unicode 數據。同text CHARSET utf8。

Number 類型:

資料類型 描述 存儲
smallint 允許從 -32,768 到 32,767 的所有數字。 2 位元組
int 允許從 -2,147,483,648 到 2,147,483,647 的所有數字。 4 位元組
decimal(p,s) 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 間的數字。p 參數指示可以存儲的最大位元數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位元數。s 必須是 0 到 p 之間的值。默認是 0。 5-17 位元組
numeric(p,s) 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 間的數字。p 參數指示可以存儲的最大位元數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位元數。s 必須是 0 到 p 之間的值。默認是 0。 5-17 位元組
float(n) 從 -1.79E + 308 到 1.79E + 308 的浮動精度數位資料。 參數 n 指示該欄位保存 4 位元組還是 8 位元組。float(24) 保存 4 位元組,而 float(53) 保存 8 位元組。n 的預設值是 53。 4 或 8 位元組
real 從 -3.40E + 38 到 3.40E + 38 的浮動精度數位資料。 4 位元組

Date 類型:

資料類型 描述 存儲
datetime 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。 8 bytes
date 僅存儲日期。從 1000 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
time 僅存儲時間。精度為 100 納秒。 3-5 bytes
timestamp 1970-01-01 00:00:00 ~ 2037-12-31 23:59:59 4 bytes

Binary 類型:

資料類型 描述
TINYBLOB 255 bytes。
BLOB 65535 bytes。
LONGBLOB 4,294,967,295 bytes。

上面詳細列出了各資料庫的資料型別,事實上,大部份的資料型別都差異不大,除非有特別的原因,否則不建議在資料庫存入大型資料,那一定會影響資料庫的效能。一般都是存該大型檔案(如圖片或word檔等)的路徑即可。如果是一般企業內部使用的系統,如ERP、CRM或官網的一些動態資料,一般都只會使用通用的字串、數字、日期等型別。那本文所介紹的幾個資料庫應該都足夠使用,特別是依目前的硬體成本大幅下滑,早期為了節省硬碟空間,會設定一些較不佔空間的資料型別,事實上現在看來意義不大。使用一般通用的型別,不論是資料庫轉換或是程式開發工具的變更,都比較不會發生問題,所以不必為了節省有限的空間,特別去使用特殊的型別。


上一篇
Day11:再論範例資料庫
下一篇
Day13:常用的 SQL 語法簡介 I
系列文
以資料庫為開發核心,利用通用 API 玩轉後端資料存取的概念與實作30

尚未有邦友留言

立即登入留言