###### tags: `SQL Server`
# SQL Server DataType
:::info
1Byte(位元組) = 8bits(位元)= 2^8/256種組合(0~255)
1Byte = 1 英文字元
1 bit = 0 ro 1
:::
### 1. 精確數值
| 資料類型 | 位元組 | .Net | 範圍 |
|:--------:|:------:|:-----------:|:------------------------------------------------------:|
| bigint | 8 | Int64/long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| int | 4 | Int32/int | -2,147,483,648 ~ 2,147,483,647 |
| smallint | 2 | Int16/short | -32,768 ~ 32,767 |
| tinyint | 1 | Byte | 0~255 |
| 資料類型 | 位元組 | .Net | 最大範圍 | 描述 |
|:------------:|:------:|:-------:|:------------------------------------------------------:|:--------------------------------:|
| decimal(p,s) | 5-17 | Decimal | - 10^38 +1 到 10^38 - 1 | 需要高精度、例如科學或財務數據 |
| numeric(p,s) | 5-17 | Decimal | - 10^38 +1 到 10^38 - 1 | 在Sql中與decimal類型功能完全相等 |
| money | 8 | Decimal | -922,337,203,685,477.5808 到 +922,337,203,685,477.5807 | 用於儲存較大貨幣 |
| smallmoney | 4 | Decimal | -214,748.3648到+214,748.3647 | 用於儲存較小貨幣 |
> [p (有效位數), s(小數位數) ex1: decimal(9,2)=>1234,10,ex2: decimal(9,2)=>123456,10],總位數不能超過9,小數必為2。
### 2. 近似數值
| 資料類型 | 位元組 | .Net | 範圍 | 描述 |
|:--------:|:------:|:------:|:---------------------------:|:----------------------------:|
| float | 4~8 | Double | -1.79E + 308 到 1.79E + 308 | 精度較高範圍較大可存科學數據 |
| real | 4 | Single | -3.40E+38到+3.40E+38 | 精度較小範圍較小可存科學數據 |
### 3. 日期和時間
| 資料類型 | .Net | 位元組 | 描述 |
|:--------------:|:--------------:|:------:|:---------------------------------------------------------------:|
| date | DateTime | 3 | 僅存儲日期。從 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 |
| datetime | DateTime | 8 | 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 3.33 毫秒。 |
| datetime2 | DateTime | 6-8 | 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 100 微秒。 |
| smalldatetime | DateTime | 4 | 從 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度為 1 分鐘。 |
| time | TimeSpan | 3-5 | 僅存儲時間。精度為 100 納秒。 |
| datetimeoffset | DateTimeOffset | -- | 時區轉換時可以使用 |
| rowversion | Byte[] | -- | 追蹤資料行的更改 |
### 4. 字元字串 & Unicode 字元字串
| 資料類型 | .Net | 位元組 | 描述 |
|:----------------:|:-------------:|:-------------------:|:---------------------------------------------------------------:|
| char(1~8000) | String/Char[] | 1~8000(1到8000字符) | 資料有固定長度,並且都為英文數字。 |
| varchar(1~8000) | String/Char[] | 1~8000 | 資料沒有固定長度,並且都為英文數字。 |
| varchar(MAX) | String/Char[] | 2^31-1 | 資料沒有固定長度,並且都為英文數字,且超過8060Bytes。 |
| nchar(1~4000) | String/Char[] | 1~8000(1到4000字符) | 資料有固定長度,並且不確定是否皆為英文數字。 |
| nvarchar(1~4000) | String/Char[] | 1~8000 | 資料沒有固定長度,並且不確定是否皆為英文數字。 |
| nvarchar(MAX) | String/Char[] | 2^31-1 | 資料沒有固定長度,並且不確定是否皆為英文數字,且超過8060Bytes。 |
> [1. SQL Server 中的最大行大小為 8060 Bytes,但使用VARCHAR(MAX)、Text不計入此限制,因為它存儲在行外的單獨 LOB(大對象)存儲區域中。]
### 5. 二進位字串
| 資料類型 | .Net | 位元組 | 描述 |
|:---------:|:----:|:------:|:------------------------------------:|
| binary | Text | 8000 | 資料有固定長度,用於儲存Image、JPG等等 |
| varbinary | Text | 8000 | 資料沒有固定長度,用於儲存Image、JPG等等 |
### 6. 其他資料類型
| 資料類型 | .Net | 位元組 | 描述 | |
|:----------------:|:-----------:|:------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| --- |
| sql_variant | Object | 8000 | 提供儲存各種不同的資料類型,但不建議使用來存資料 | |
| xml | XML | -- | 存儲XML數據及查詢 | |
| uniqueidentifier | Guid | 16 | 全局唯一ID,Guid的資料類型,此ID不會跟任何值重複 | |
| hierarchyid | HierarchyId | -- | 儲存階層結構資料,建立父子節點之間的關聯。 https://aska22.medium.com/%E8%B3%87%E6%96%99%E5%BA%AB%E4%BD%BF%E7%94%A8-hierarchyid-%E7%B4%80%E9%8C%84%E6%A8%B9%E7%8B%80%E9%97%9C%E8%81%AF%E8%B3%87%E6%96%99-c25c0e0f957b | |
| geometry | geometry | -- | 空間數據類型(平面) | |
| geography | geography | -- | 空間數據類型(橢圓體 或圓形地球) 系統中 | |