- 数字类型
列类型 | 存储空间 | 取值范围 | |
SIGNED | UNSIGNED | ||
tinyint | 1字节 | -128~127 | 0~255 |
smallint | 2字节 | -32768~32767 | 0~65535 |
mediumint | 3字节 | -8388608~8388607 | 0~16777215 |
int | 4字节 | -2147483648~2147483647 | 0~4294967295 |
bigint | 8字节 | -9223372036854775808 | 0 |
~9223372036854775807 | ~18446744073709551615 |
列类型 | 存储空间 | 是否精确类型 |
FLOAT | 4字节 | 否 |
DOUBLE | 8字节 | 否 |
DECIMAL | 每4字节存9个数字,小数点占1字节(财务) | 是 |
- 日期类型与二进制类型
- DATETIME日期类型
占用8字节,与时区无关,保存到毫秒,保存时间范围大(不要使用字符串存储日期类型,因为无法使用MySQL日期函数操作,损失很多便捷性,如果使用字符串的存储要多)
- TIMESTAMP时间戳
时间范围(1970-1-1到2038-1-19),精确到秒,采用整型存储,依赖于时区,自动更新timestamp列的值
- 字符串类型
- VARCHAR类型
VARCHAR变体长度,根据实际内容保存数据,使用最小的符合需求的长度;VARCHAR(255)以下使用额外一个字节保存长度,以上则使用额外两个字节保存长度;VARCHAR(5)与VARCHAR(200)内存占用不同,前者开辟5个内存空间,后者开辟200内存空间;VARCHAR变更长度时会锁表(255到256)
VARCHAR适合存储长度波动大的数据,(如博客文章),字符串很少被更新的场景,VARCHAR适合保存多字节字符(utf-8)
- CHAR类型
CHAR属于定长数据(最大255),自动删除末尾的空格,检索效率比VARCHAR高
适合存储长度波动不大的数据(如MD5摘要),适合存储短字符串,适合存储经常更新的字符串