MariaDB 資料庫的資料型別大項目可以分為數字型別、文字型別及日期型別,這篇文章主要是針對每個資料型別的最大最小值支援範圍、有效位數及其特性做個紀錄一下。

數字型別

大多數的數字型別都提供以下定義方式:

Signed
欄位有負數。
Unsigned
欄位只有正數。
Length
與 ZeroFill 一起使用,表示資料的預設長度。
ZeroFill
欄位前方會自動補 0,補到資料等於預設長度,如果指定 ZeroFill,會自動設定 Unsigned。
AUTO_INCREMENT
欄位不需指定數值,系統會自動遞增,通常是用來產生唯一的識別碼。

整數型別

型別 Signed 範圍 Unsigned 範圍
TINYINT -128 ~ 127 0 ~ 255
SMALLINT -32,768 ~ 32,767 0 ~ 65,535
MEDIUMINT -8,388,608 ~ 8,388,607 0 ~ 16,777,215
INT
INTEGER
-2,147,483,648 ~ 2,147,483,647 0 ~ 4,294,967,295
BIGINT -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615
BOOL
BOOLEAN
等於 TINYINT(1)

浮點數型別

型別 範圍 有效位數
DECIMAL
DEC
NUMERIC
FIXED
NUMBER
總長度:65
小數位點:38
65
FLOAT -3.402823466E+38 ~ -1.175494351E-38
0
1.175494351E-38 ~ 3.402823466E+38
7
DOUBLE
DOUBLE PRECISION
REAL
-1.7976931348623157E+308 ~ -2.2250738585072014E-308
0
2.2250738585072014E-308 ~ 1.7976931348623157E+308
15

MariaDB 資料庫中的所有計算都是使用 DOUBLE 型別完成的,所以如果使用 FLOAT 型別,可能會有意想不到的誤差值,應該避免使用 FLOAT 型別,一般應用可以使用 DOUBLE 型別,如果對於數字有很高的精準度要求的話,例如與金錢計算有關的話,可以使用 DECIMAL 型別,但 DECIMAL 可以儲存的數值範圍比 DOUBLE 型別小很多。

位元型別

BIT 範圍
BIT 1~64 位數

文字型別

字串型別

型別 長度 刪除後方空白 可指定長度
CHAR 0 ~ 255 字元 可以
VARCHAR 0 ~ 65,532 字元 可以
TINYTEXT 0 ~ 255 字元 不會 不可以
TEXT 0 ~ 65,535 字元 不會 不可以
MEDIUMTEXT 0 ~ 16,777,215 字元 不會 不可以
LONGTEXT 0 ~ 4294,967295 字元 不會 不可以
BINARY
CHAR BYTE
0 ~ 255 bytes 不會 可以
VARBINARY 0 ~ 65,532 bytes 不會 可以
  • CHAR 為固定長度的資料型別,意思就是不管儲存多長的文字,都是使用相同的容量儲存,這表示可能會造成空間浪費的問題,但也由於固定長度,所以搜尋速度會比較快。
  • CHAR 系列及 TEXT 系列型別實際上是會根據所使用的字元編碼,而有不同的支援長度,BINARY 系列無需指定字元編碼。比較特別的是 CHAR 無論中文或英文都是使用相同的儲存空間。
  • BINARY 與 CHAR 類似,VARBINARY 與 VARCHAR 類似,但 BINARY 及 VARBINARY 儲存的是 binary byte 字串,而不是字元字串,所以也不用指定字元編碼。
  • CHAR 與 VARCHAR 不區分大小寫,而 BINARY 與 VARBINARY 會區分大小寫。
  • MariaDB 10.2.1 版本之後,TEXT 系列的資料型別可以有預設值。

大型物件型別

型別 長度
TINYBLOB 0 ~ 255 bytes
BLOB 0 ~ 65,535 bytes
MEDIUMBLOB 0 ~ 16,777,215 bytes
LONGBLOB 0 ~ 4,294,967,295 bytes (4GB)

其他型別

型別 說明
INET6 用來儲存 IPv6。
JSON 與 LONGTEXT 相同,但會額外設定 json_valid 來驗證插入的值是否為有效的 JSON 格式。
ENUM 設定一組清單值,儲存時可從這一組清單挑選一個值儲存,清單最多支援 65,535 個不同的值。
SET 設定一組清單值,儲存時可從這一組清單挑選多個值儲存,清單最多支援 64 個不同的值。

日期型別

型別 範圍 格式
DATE 1000-01-01 ~ 9999-12-31 YYYY-MM-DD
TIME -838:59:59.999999 ~ 838:59:59.999999 HH:MM:SS.ssssss
DATETIME 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 YYYY-MM-DD HH:MM:SS.ssssss
TIMESTAMP 1970-01-01 00:00:01.000000 ~ 2038-01-19 03:14:07.999999 YYYY-MM-DD HH:MM:SS.ssssss
YEAR 1901 ~ 2155、0000 YYYY

TIME、DATETIME 及 TIMESTAMP 型別中的微秒部分最多支援到 6 位。TIMESTAMP 通常還會搭配 DEFAULT CURRENT_TIMESTAMP 及 ON UPDATE CURRENT_TIMESTAMP 一起使用。

DEFAULT CURRENT_TIMESTAMP
用於資料建立時,系統自動寫入目前的時間。
ON UPDATE CURRENT_TIMESTAMP
用於資料更新時,系統自動寫入目前的時間。

參考資料