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字节)的二进制字符?