MySQL不同存储引擎可能会有不同。下面的内容以InnoDB为主。
类型 | 字节数 | 范围 |
---|---|---|
TNIYINT | 1 | -128~127 |
SMALLINT | 2 | -32767~32768 |
MEDIUMINT | 3 | -8388608~8388607 |
INT | 4 | -2147483648~2147483647 |
BIGINT | 8 | -9223372036854775808~9223372036854775807 |
类型 | 字节 | 备注 |
---|---|---|
FLOAT | 4 | 单精度浮点数 |
DOUBLE | 8 | 双精度浮点数 |
DECIMAL | 可变 | 高精度定点数 |
类型 | 最大长度 | 备注 |
---|---|---|
CHAR(size) | 255字节 | 定长。size指定的是字符数,不是字节数。 |
VARCHAR(size) | 65532字节 | 变长。size指定的是字符数,不是字节数。 |
类型 | 最大长度 | 备注 |
---|---|---|
BINARY | 255 | 定长 |
VARBINARY | 65535 | 变长 |
L表示数据的长度。 L+x表示存储需要的空间。
类型 | 存储 |
---|---|
TINYBLOB | L+1 bytes, L < 2^8 |
SMALLBLOB/BLOB | L+2 bytes, L < 2^16 |
MEDIUMBLOB | L+3 bytes, L < 2^24 |
LONGBLOB | L+4 bytes, L < 2^32 |
TINYTEXT | L+1 bytes, L < 2^8 |
SMALLTEXT/TEXT | L+2 bytes, L < 2^16 |
MEDIUMTEXT | L+3 bytes, L < 2^24 |
LONGTEXT | L+4 bytes, L < 2^32 |
类型 | 大小 |
---|---|
TIMESTAMP | 4字节 |
DATETIME | 8字节 |
一般情况下,应该尽量使用可以正确存储数据的最小数据类型。 简单就好。
比如,用MySQL的内建类型date, time, datetime来存储时间,而不是使用字符串;用INT UNSIGNED来存储IPv4地址。
如何存储IPv6的地址?IPv6地址128bit,MySQL最大的整数类型BIGINT只有64bit。可以将其存储成定长(16字节)的二进制字符?