1、字段类型设计原则
- 最小的就是最好的:减少磁盘、内存、缓存使用,降低I/O开销。
- 尽量避免NULL:能为空的字段在索引的处理上更多复杂,也需要更多的存储开销。
- 不要用字符串存储时间和数值,他们在存储和排序上的差距较大
- 字符串长度相差较大时用varchar,长度接近时用char。varchar需要额外的2个字节存储长度信息。
- int(1)和int(11)在存储上一样的,只是在客户端上看到的信息不一样
2、MySQL常用字段类型有:
数值类型:
字段类型 | 大小(字节) | 值范围 |
tinyint | 1 | (-128,127) |
smallint | 2 | (-32768,32767) |
mediumint | 3 | (-2^23,2^23-1) |
int/integer | 4 | (-2^31,2^31-1) |
bigint | 8 | (-2^63,2^63-1) |
float | 4 | |
double | 8 | |
decimal(m,n) |
字符类型:
字段类型 | 大小(字符) | 说明 |
char | 0-255 | 固定长度字符 |
varchar | 0-65535 | 可变长字符 |
tinyblob | ||
blob | ||
mediumblob | ||
longblob | ||
tinytext | 最多存255个字符 | |
text | 最多存65535字符 | |
mediumtext | ||
longtext |
时间类型:
字段类型 | 大小(字节) | 值范围 | 显示格式 | 说明 |
year | 1 | [1901,2155] | yyyy | |
date | 3 | [1000-01-01,9999-12-31] | yyyy-MM-dd | 日期 |
time | 3 | HH:mm:ss | 时间 | |
datetime | 8 | yyyy-MM-dd HH:mm:ss | 日期和时间 | |
timestamp | 4 | yyyy-MM-dd HH:mm:ss.SSS | 时间戳,可精确微妙,精度的位数可定义。 |
其他:
字段类型 | 说明 |
bit | 二进制字符串,长度1-64 |
set | 集合类型,存储上实际是int类型 |
enum | 枚举类型,最多支持65535个枚举项。枚举类型内部使用int类型存储 |
MySQL没有bool(常用tinyint(1)表示布尔类型)、long类型