【資料庫】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: 用於資料更新時,系統自動寫入目前的時間。
Facebook 留言