SQL Server 快速上手 (5) - 資料型態(DataType)

本篇以 SQL Server 2019 Express Edition 及 SQL Server Management Studio 18.9 為教學範例。

每種程式語言都有其定義的資料型態,SQL也有定義的資料型態 型態包括整數、精確位數、浮點數、字元、貨幣資料、日期和時間資料、二進位字串等。 網路上資源非常多,Google搜尋 [SQL SERVER 資料型態] 有非常多的資源可參考

本篇文章僅說明幾個最基本且常用的型態(不包含全部型態)

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


顧名思義就是文字 (中、英、日…等),在SQL SERVER中常見的如下:

資料類型 描述
char(n) 固定長度的字串。最多 4,000 個字元。
varchar(n) 可變長度的字串。最多 4,000 個字元。
nchar(n) 支援UNICODE UCS-2字元,固定長度的字串。最多 4,000 個字元。
nvarchar(n) 支援UNICODE UCS-2字元,可變長度的字串。最多 4,000 個字元。
  • var : 意思是可變動的,因為欄位長度可變動,會使用2Byte去儲存地址
  • n : 支援UNICODE UCS-2字元,為萬國碼(支援中文字),會使用2Btye儲存1字

上面四個型態都可儲存中文,差別在於Byte的使用差異,想了解細節的讀者也可以Google搜尋其他文章

常用數值資料 (Numeric Data)


資料類型 描述 空間
int -2,147,483,648 到 2,147,483,647 之間的所有數字 4 bytes
bigint -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間的所有數字 8 bytes
decimal(p,s) 從 -10^38 +1 到 10^38 -1 間固定精度和比例的數字 5~17 bytes
float 從 -1.79E + 308 到 1.79E + 308 的浮動精度數字 4或8 bytes

常用日期/時間資料 (Datetime Data)


資料類型 描述 空間
datetime 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日, 從 00:00:00 到 23:59:59.999。 8 bytes
datetime2 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日, 從 00:00:00 到 23:59:59.9999999。 6-8 bytes

布林值 (Boolean Data)


資料類型 描述 空間
bit 其值有 1、0 或 NULL 字串值 TRUE 和 FALSE 可以轉換成 bit 值:TRUE 會轉換成 1,FALSE 則轉換成 0。 2 bytes

二進位字串(Binary)


資料類型 描述 空間
binary(n) 固定長度的二進位資料。 1-8,000 bytes
varbinary(n) 可變長度的二進位資料。 max 表示儲存體大小上限是 2^31-1 個位元組 1-8,000 bytes

在前幾篇文章中我們建立的資料庫並沒有特別處理欄位資料類型

可由資料庫 > 設計 中檢視目前資料表內的欄位類型

可以看到從Excel匯入時預設會幫我們判斷 日期、文字 我們可以直接手動修改資料類型,也可用SQL 語法進行更新 除了型態之外,右邊有個 [允許NULL] 代表該欄位是否必須要填入值(打勾表示不必)

譬如我們知道身分證是固定十碼且一定要有值,則可改為

更新完後記得按下儲存,才會真的更新資料表,按下儲存時可能會出現:

這是SSMS的防護機制,怕使用者不小心改錯欄位造成資料錯誤 我們可以透過 工具 > 選項

尋找設計師 > 資料表和資料庫設計工具 ,把[防止儲存需要資料表重建的變更] 的勾取消

確定後再重新儲存一次,即可成功更新資料型態

因文章規劃為入門快速上手,故先建立資料表後才說明欄位型態 但未來若真的要設計資料表時,一定要先定義好欄位型態,如果程式上線後才要調整型態,例如nvarchar(200) 改為 nvarchar(50)或 float 改 decimal,都有可能會遇到字串長度被截斷或是小數點計算不正確等情形發生。

想要深入了解可 Google搜尋 [sql server 修改欄位型態]

參考資料

https://docs.microsoft.com/zh-tw/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15 https://ithelp.ithome.com.tw/articles/10203456 https://dotblogs.com.tw/henryli/2014/05/27/145277 https://docs.microsoft.com/zh-tw/sql/t-sql/data-types/binary-and-varbinary-transact-sql?view=sql-server-ver15 https://dotblogs.com.tw/henryli/2015/06/13/151557


留言板
歷史留言

標籤