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