SQL MySQL, SQL Server 和 MS Access 的資料型別
列的資料型別定義了該列可以包含的值:整數、字元、貨幣、日期和時間、二進位制等。
SQL 資料型別
資料庫表中的每一列都必須有一個名稱和一個數據型別。
SQL 開發人員在建立表時必須決定每列要儲存什麼型別的資料。資料型別是 SQL 理解每列中預期資料型別的指南,它還確定了 SQL 如何與儲存的資料進行互動。
注意:不同資料庫中的資料型別名稱可能不同。即使名稱相同,大小和其他細節也可能不同!務必查閱文件!
MySQL 資料型別 (版本 8.0)
在 MySQL 中,主要有三種資料型別:字串、數值以及日期和時間。
字串資料型別
資料型別 | 描述 |
---|---|
CHAR(size) | 固定長度字串(可包含字母、數字和特殊字元)。size 引數指定了字元列的長度,範圍從 0 到 255。預設值為 1。 |
VARCHAR(size) | 可變長度字串(可包含字母、數字和特殊字元)。size 引數指定了最大字串長度(字元數),範圍從 0 到 65535。 |
BINARY(size) | 與 CHAR() 相同,但儲存二進位制位元組字串。size 引數指定了位元組列的長度。預設值為 1。 |
VARBINARY(size) | 與 VARCHAR() 相同,但儲存二進位制位元組字串。size 引數指定了最大位元組列的長度。 |
TINYBLOB | 用於 BLOB(二進位制大物件)。最大長度:255 位元組。 |
TINYTEXT | 儲存最大長度為 255 個字元的字串。 |
TEXT(size) | 儲存最大長度為 65,535 位元組的字串。 |
BLOB(size) | 用於 BLOB(二進位制大物件)。儲存最多 65,535 位元組的資料。 |
MEDIUMTEXT | 儲存最大長度為 16,777,215 個字元的字串。 |
MEDIUMBLOB | 用於 BLOB(二進位制大物件)。儲存最多 16,777,215 位元組的資料。 |
LONGTEXT | 儲存最大長度為 4,294,967,295 個字元的字串。 |
LONGBLOB | 用於 BLOB(二進位制大物件)。儲存最多 4,294,967,295 位元組的資料。 |
ENUM(val1, val2, val3, ...) | 一個字串物件,只能包含一個值,該值從可能的列表中選擇。您可以在 ENUM 列表中最多列出 65535 個值。如果插入的值不在列表中,則會插入一個空值。值將按您輸入的順序排序。 |
SET(val1, val2, val3, ...) | 一個字串物件,可以包含 0 個或多個值,這些值從可能的列表中選擇。您可以在 SET 列表中最多列出 64 個值。 |
數值資料型別
資料型別 | 描述 |
---|---|
BIT(size) | 位值型別。每個值的位數在size中指定。size引數可以包含 1 到 64 的值。size的預設值是 1。 |
TINYINT(size) | 非常小的整數。有符號範圍是 -128 到 127。無符號範圍是 0 到 255。size引數指定了最大顯示寬度(即 255)。 |
BOOL | 零被視為假,非零值被視為真。 |
BOOLEAN | 等於 BOOL。 |
SMALLINT(size) | 小的整數。有符號範圍是 -32768 到 32767。無符號範圍是 0 到 65535。size引數指定了最大顯示寬度(即 255)。 |
MEDIUMINT(size) | 中等整數。有符號範圍是 -8388608 到 8388607。無符號範圍是 0 到 16777215。size引數指定了最大顯示寬度(即 255)。 |
INT(size) | 中等整數。有符號範圍是 -2147483648 到 2147483647。無符號範圍是 0 到 4294967295。size引數指定了最大顯示寬度(即 255)。 |
INTEGER(size) | 等於 INT(size)。 |
BIGINT(size) | 大的整數。有符號範圍是 -9223372036854775808 到 9223372036854775807。無符號範圍是 0 到 18446744073709551615。size引數指定了最大顯示寬度(即 255)。 |
FLOAT(size, d) | 浮點數。總位數在size中指定。小數點後的位數在d引數中指定。此語法在 MySQL 8.0.17 中已棄用,將在未來的 MySQL 版本中移除。 |
FLOAT(p) | 浮點數。MySQL 使用p值來確定是將 FLOAT 還是 DOUBLE 用於結果資料型別。如果p的範圍是 0 到 24,則資料型別為 FLOAT()。如果p的範圍是 25 到 53,則資料型別為 DOUBLE()。 |
DOUBLE(size, d) | 正常大小的浮點數。總位數在size中指定。小數點後的位數在d引數中指定。 |
DOUBLE PRECISION(size, d) | |
DECIMAL(size, d) | 精確的定點數。總位數在size中指定。小數點後的位數在d引數中指定。size的最大值為 65。d的最大值為 30。size的預設值為 10。d的預設值為 0。 |
DEC(size, d) | 等於 DECIMAL(size,d)。 |
注意:所有數值資料型別都可以有一個額外的選項:UNSIGNED 或 ZEROFILL。如果您新增 UNSIGNED 選項,MySQL 會禁止該列出現負值。如果您新增 ZEROFILL 選項,MySQL 會自動為該列新增 UNSIGNED 屬性。
日期和時間資料型別
資料型別 | 描述 |
---|---|
DATE | 日期。格式:YYYY-MM-DD。支援的範圍從 '1000-01-01' 到 '9999-12-31'。 |
DATETIME(fsp) | 日期和時間組合。格式:YYYY-MM-DD hh:mm:ss。支援的範圍從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。在列定義中新增 DEFAULT 和 ON UPDATE 以實現自動初始化和更新為當前日期和時間。 |
TIMESTAMP(fsp) | 時間戳。TIMESTAMP 值儲存為自 Unix 紀元 ('1970-01-01 00:00:00' UTC) 以來的秒數。格式:YYYY-MM-DD hh:mm:ss。支援的範圍從 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC。可以透過在列定義中使用 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 來指定自動初始化和更新為當前日期和時間。 |
TIME(fsp) | 時間。格式:hh:mm:ss。支援的範圍從 '-838:59:59' 到 '838:59:59'。 |
YEAR | 以四位數字格式表示的年份。四位數字格式允許的值:1901 到 2155,以及 0000。 MySQL 8.0 不支援兩位數字格式的年份。 |
SQL Server 資料型別
字串資料型別
資料型別 | 描述 | 最大尺寸 | Storage |
---|---|---|---|
char(n) | 固定寬度字元字串。 | 8,000 個字元 | 定義寬度 |
varchar(n) | 可變寬度字元字串。 | 8,000 個字元 | 2 位元組 + 字元數 |
varchar(max) | 可變寬度字元字串。 | 1,073,741,824 個字元 | 2 位元組 + 字元數 |
text | 可變寬度字元字串。 | 2GB 文字資料 | 4 位元組 + 字元數 |
nchar | 固定寬度 Unicode 字串。 | 4,000 個字元 | 定義寬度 x 2 |
nvarchar | 可變寬度 Unicode 字串。 | 4,000 個字元 | |
nvarchar(max) | 可變寬度 Unicode 字串。 | 536,870,912 個字元 | |
ntext | 可變寬度 Unicode 字串。 | 2GB 文字資料 | |
binary(n) | 固定寬度二進位制字串。 | 8,000 位元組 | |
varbinary | 可變寬度二進位制字串。 | 8,000 位元組 | |
varbinary(max) | 可變寬度二進位制字串。 | 2GB | |
圖片 | 可變寬度二進位制字串。 | 2GB |
數值資料型別
資料型別 | 描述 | Storage |
---|---|---|
bit | 整數,可以是 0、1 或 NULL。 | |
tinyint | 允許的整數範圍是 0 到 255。 | 1 位元組 |
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 位元組 |
numeric(p,s) | 固定精度和標度數字。 允許的數字範圍是 -10^38 +1 到 10^38 –1。 p 引數表示可以儲存的總位數(包括小數點左邊和右邊)。p 必須是 1 到 38 之間的一個值。預設為 18。 s 引數表示小數點右邊可以儲存的最大位數。s 必須是 0 到 p 之間的一個值。預設值為 0。 |
5-17 位元組 |
smallmoney | 貨幣資料,範圍從 -214,748.3648 到 214,748.3647。 | 4 位元組 |
money | 貨幣資料,範圍從 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。 | 8 位元組 |
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 位元組 |
日期和時間資料型別
資料型別 | 描述 | Storage |
---|---|---|
datetime | 從 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度為 3.33 毫秒。 | 8 位元組 |
datetime2 | 從 0001 年 1 月 1 日到 9999 年 12 月 31 日,精度為 100 納秒。 | 6-8 位元組 |
smalldatetime | 從 1900 年 1 月 1 日到 2079 年 6 月 6 日,精度為 1 分鐘。 | 4 位元組 |
date | 僅儲存日期。範圍從 0001 年 1 月 1 日到 9999 年 12 月 31 日。 | 3 位元組 |
time | 僅儲存時間,精度為 100 納秒。 | 3-5 位元組 |
datetimeoffset | 與 datetime2 相同,但增加了時區偏移量。 | 8-10 位元組 |
timestamp | 儲存一個唯一數字,每次建立或修改行時都會更新。timestamp 值基於內部時鐘,與實際時間無關。每個表只能有一個 timestamp 變數。 |
其他資料型別
資料型別 | 描述 |
---|---|
sql_variant | 儲存最多 8,000 位元組的各種資料型別,除了 text、ntext 和 timestamp。 |
uniqueidentifier | 儲存全域性唯一識別符號 (GUID)。 |
xml | 儲存 XML 格式的資料。最大 2GB。 |
cursor | 儲存用於資料庫操作的遊標引用。 |
table | 儲存用於後續處理的結果集。 |
MS Access 資料型別
資料型別 | 描述 | Storage |
---|---|---|
文字 | 用於文字或文字與數字的組合。最多 255 個字元。 | |
Memo | Memo 用於儲存大量文字。最多儲存 65,536 個字元。注意:您不能對 memo 欄位進行排序。但是,它們是可搜尋的。 | |
Byte | 允許的整數範圍是 0 到 255。 | 1 位元組 |
整數 | 允許的整數範圍是 -32,768 到 32,767。 | 2 位元組 |
Long | 允許的整數範圍是 -2,147,483,648 到 2,147,483,647。 | 4 位元組 |
Single | 單精度浮點數。可以處理大多數小數。 | 4 位元組 |
Double | 雙精度浮點數。可以處理大多數小數。 | 8 位元組 |
Currency | 用於貨幣。可以儲存最多 15 位整數美元,外加 4 位小數。提示:您可以選擇使用哪種貨幣。 | 8 位元組 |
AutoNumber | AutoNumber 欄位會自動為每條記錄分配一個唯一的數字,通常從 1 開始。 | 4 位元組 |
Date/Time | 用於日期和時間。 | 8 位元組 |
Yes/No | 邏輯欄位可以顯示為 Yes/No、True/False 或 On/Off。在程式碼中,使用常量 True 和 False(分別等於 -1 和 0)。注意:Yes/No 欄位不允許 NULL 值。 | 1 位 |
Ole Object | 可以儲存圖片、音訊、影片或其他 BLOB(二進位制大物件)。 | 最多 1GB |
Hyperlink | 包含指向其他檔案(包括網頁)的連結。 | |
Lookup Wizard | 允許您輸入選項列表,然後可以從下拉列表中選擇。 | 4 位元組 |