但官網資料跳來跳去,所以參考了一些資料,整理成表格。
數字(Numeric)
資料類型 | 儲存空間(Bytes) | 最小值(Signed/Unsigned) | 最大值(Signed/Unsigned) |
---|---|---|---|
TINYINT |
1 byte | -128 |
127 |
0 |
255 |
||
SMALLINT |
2 bytes | -32768 |
32767 |
0 |
65535 |
||
MEDIUMINT |
3 bytes | -8388608 |
8388607 |
0 |
16777215 |
||
INT,INTEGER |
4 bytes | -2147483648 |
2147483647 |
0 |
4294967295 |
||
BIGINT |
8 bytes | -9223372036854775808 |
9223372036854775807 |
0 |
18446744073709551615 |
||
FLOAT(p) | 4 bytes ( 0 <= p <= 24 ) 8 bytes ( 25 <= p <= 53) |
p represents the precision in bits, 但MySQL僅將p用來決定使用FLOAT或DOUBLE資料型態。 當 p 的範圍是 0 ~ 24 ,即為沒設定(M.D)的 FLOAT 資料型態。 當 p 的範圍是 25 ~ 53,,即為沒設定(M.D)的 DOUBLE 資料型態。 |
|
FLOAT[(M,D)] | 4 bytes | -3.402823466E+38 to -1.175494351E-38 , 0 , and 1.175494351E-38 to 3.402823466E+38 |
|
DOUBLE [(M,D)] | 8 bytes M = 整數位數+小數位數 D=小數位數 省略[(M,D)], 將以硬體所能儲存的為限制 |
-1.7976931348623157E+308 to -2.2250738585072014E-308 , 0 , and 2.2250738585072014E-308 to 1.7976931348623157E+308 |
|
REAL | 8 bytes | DOUBLE別名. 但當 REAL_AS_FLOAT 模式打開, REAL變成FLOAT 的別名。 |
|
DECIMAL(M,D) 別名: NUMERIC(M,D) DEC(M,D) FIXED(M,D) |
每9個數字須要4 bytes, 數字個數與所佔空間關係參照 (註1) |
M:1~65 (舊版本:1~254) D:0~30 |
|
BIT(M) | 大約 (M+7)/8 bytes | M:1~64 (預設:1) |
不滿9個數字 | 所需 Bytes |
---|---|
0 | 0 |
1~2 | 1 |
3~4 | 2 |
5~6 | 3 |
7~9 | 4 |
例如:12345678901234.123456 => decimal(20,6) => 整數有 14 個數字,小數有 6 個數字。所需空間 = (4Bytes+3Bytes) + 3Bytes = 10 Bytes
時間(Date and Time)
資料類型 | 儲存空間(MySQL 5.6.4以前) | 儲存空間(MySQL 5.6.4) | 範圍 |
---|---|---|---|
YEAR | 1 byte | 1 byte | YEAR(4):1901 ~ 2155, 或0000
|
DATE | 3 bytes | 3 bytes | '1000-01-01' ~ '9999-12-31' |
TIME | 3 bytes | 3 bytes + 秒的小數部分所需儲存空間(註2) | -838:59:59' ~ '838:59:59' |
DATETIME | 8 bytes | 5 bytes + 秒的小數部分所需儲存空間(註2) | '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' 儲存的值,顯示時,不會隨 MySQL 時區 time_zone 設定不同而不同 |
TIMESTAMP | 4 bytes | 4 bytes + 秒的小數部分所需儲存空間(註2) | '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC 儲存的值,顯示時,會隨 MySQL 時區 time_zone 設定不同而不同 |
秒的小數位數 | 所需儲存空間 |
---|---|
0 | 0 bytes |
1 | 1 byte |
2 | 1 byte |
3 | 2 bytes |
4 | 2 bytes |
5 | 3 bytes |
6 | 3 bytes |
字串(String)
資料類型 | 儲存空間 |
---|---|
CHAR( |
M × w bytes,
0 <= 255, (w 是字符集中字符所需的最大儲存空間) |
BINARY( |
M bytes, 0 <= 255 |
VARCHAR( , VARBINARY( |
L + 1 bytes:當字數所需儲存空間在 0~255 bytes 時。L + 2 bytes:當字數所需儲存空間會超過 255 bytes 時。 |
TINYBLOB, TINYTEXT | L + 1 bytes, L <
28 |
BLOB, TEXT | L + 2 bytes, L <
216。不能有預設值(註3) |
MEDIUMBLOB, MEDIUMTEXT | L + 3 bytes, L <
224 |
LONGBLOB, LONGTEXT | L + 4 bytes, L <
232 |
ENUM(' |
1 或 2 bytes, 依列舉的數量而定 (列舉數量最大65,535) |
SET(' |
1, 2, 3, 4, 或 8 bytes, 依SET的成員數量而定 (最多64 個成員) |
L
:the byte length of the string 註3:官方文檔說明「BLOB, TEXT, GEOMETRY, and JSON columns cannot be assigned a default value.」
參考資料:
http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html
http://dev.mysql.com/doc/refman/5.6/en/numeric-types.html#integer-types
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
http://dev.mysql.com/doc/refman/5.6/en/datetime.html
http://dev.mysql.com/doc/refman/5.6/en/time.html
http://dev.mysql.com/doc/refman/5.1/zh/precision-math.html
http://help.scibit.com/mascon/masconMySQL_Field_Types.html
MySQL :: MySQL 5.7 Reference Manual :: 11.7 Data Type Default Values
MySQL :: MySQL 5.7 Reference Manual :: 11.4.3 The BLOB and TEXT Types
沒有留言:
張貼留言