【資料庫】MariaDB 資料型別

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

1 數字型別

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

  • 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位數

2 文字型別

字串型別

型別 長度 刪除後方空白 可指定長度
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個不同的值。

3 日期型別

型別 範圍 格式
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: 用於資料更新時,系統自動寫入目前的時間。

4附註

參考資料

Facebook 留言