MariaDB 資料型別
資料庫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
- 用於資料更新時,系統自動寫入目前的時間。
參考資料
熱門文章
最新文章
0 則留言