MySQL数据类型
类型 | 类型名称 | 类型说明 |
整数类型 | tinyInt | 8位二进制 |
| smallint | 16位二进制 |
| mediumint | 24位二进制 |
| int(integer) | 32位二进制 |
小数类型 | float | 单精度浮点数 |
| double | 双精度浮点数 |
| decimal(m,d) | 压缩严格的定点数 |
日期类型 | year | YYYY 1901~2155 |
| time | HH:MM:SS -838:59:59~838:59:59 |
| date | YYYY-MM-DD 1000-01-01~9999-12-3 |
| datetime | YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 |
| timestamp | YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~2038-01-19 03:14:07 |
字符类型 | CHAR(M) | M为0~255之间的整数 |
| VARCHAR(M) | M为0~65535之间的整数 |
| TINYBLOB | 允许长度0~255字节 |
| BLOB | 允许长度0~65535字节 |
| MEDIUMBLOB | 允许长度0~167772150字节 |
| LONGBLOB | 允许长度0~4294967295字节 |
| TINYTEXT | 允许长度0~255字节 |
| TEXT | 允许长度0~65535字节 |
| MEDIUMTEXT | 允许长度0~167772150字节 |
| LONGTEXT | 允许长度0~4294967295字节 |
| VARBINARY(M) | 允许长度0~M个字节的变长字节字符串 |
| BINARY(M) | 允许长度0~M个字节的定长字节字符串 |
枚举类型 | ENUM | 把不重复的数据存储为一个预定义的集合。 |
1、字符类型使用策略:
数据经常变更:CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
数据非常短:CHAR比VARCHAR在存储空间上更有效率。
PS:使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。
尽量避免使用TEXT/BLOB类型,查询时会使用临时表,导致严重的性能开销。
2、枚举类型
ENUM存储非常紧凑,会把列表值压缩到一个或两个字节。
ENUM在内部存储时,其实存的是整数。
尽量避免使用数字作为ENUM枚举的常量,因为容易混乱。
排序是按照内部存储的整数
3、日期类型
尽量使用timestamp,空间效率高于datetime,
时间戳:可用整数来保存,如果需要存储微妙,可以使用bigint存储。
优点:具有 Timestamp 类型的所具有一些优点,并且进行日期排序以及对比等操作的效率会更高,跨系统也很方便。
缺点:数据的可读性太差了,无法直观的看到具体时间。
SQL:
将存储的整型时间戳转化:使用FROM_UNIXTIME,将时间戳转换为时间格式。
转成年-月-日 时:分:秒:
SELECT FROM_UNIXTIME(createTime) FROM user;
转成其他时间格式:自行调整后面的转换格式
SELECT FROM_UNIXTIME(createTime,'%Y-%m-%d %H:%i:%s') FROM user;
切记:
不要用字符串存储日期,原因:
1、字符串占用的空间更大
2、字符串存储的日期比较的效率较低(需要逐个字符进行比对)
3、字符串存储的日期无法用日期相关的API进行计算和比较