前言
MySQL中有许多数据类型,其中用的最多的便是varchar,int等。但是使用过程中我们也会对其他数据类型的使用有疑问,今天就写一篇博客来介绍一下MySQL中的数据类型,及其使用场景。
数据类型分类
MySQL中的数据类型大致可以分为3大类:
- 数值类型
- 日期/时间类型
- 字符串(字符)类型
当然还有一些比较特殊的数据类型,比如 ENUM 等。
数值类型
数值类型相信很多同学都跟我一样,数据量小的时候使用 int 类型,数据量大的时候使用 bigint 类型。
但是其实MySQL里面有多种数据类型,数据类型可以分为两种,整形与浮点型。
整数形:
类型 | 大小 | 范围 | 用途 |
tinyint | 1 byte | (-128,127) | 小整数值 |
smallint | 2 byte | (-32768,32767) | 大整数值 |
mediumint | 3 byte | (-8388608,8399607) | 大整数值 |
int(integer) | 4 byte | (-2147483648~2147483647) | 大整数值 |
bigint | 8 byte | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | 极大整数值 |
其实可以很明显的看出,TINYINT对应Java中的Byte类,SMALLINT对应Java中的Short类,INT对应Java中的Integer类,BIGINT对应Java中的Long类。
关于整形的数字,其实没啥好说的,使用场景差不多便是账号等字段,只需要注意其范围即可。
浮点型:
类型 | 大小 | 用途 |
float | 4 byte | 单精度浮点数 |
double | 8 byte | 双精度浮点数 |
decimal | 定点小数值 |
在阿里巴巴规范中,小数只能使用DECIMAL类型,因为FLOAT与DOUBLE类型会有数值不准确的问题,特别是在有关金钱等字段。
日期类型
主要的日期类型:date,datetime,timestamp,time
类型 | 大小(byte) | 范围 | 格式 | 样例 |
year | 1 | 1901~2155 | YYYY | 2021 |
date | 3 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 2021-05-30 |
time | 3 | ‘-838:59:59’/‘838:59:59’ | MM-DD:SS | 23:30:00 |
timestamp | 4 | 1970-01-01 00:00:00UTC~2038……时间,根据时区不同而不同,结束时间为2147483647秒 | YYYYMMDDHHMMSS | 2021-05-30 12:30:12 |
datetime | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 2040-05-20 13:14:00 |
日期类型注意点
- time类型小时部分如此大的原因是因为其不止可以表示一天的时间(小于24小时),还可以是某个事件过去的时间,或者两个事件之间的时间间隔。
- timestamp与datetime显示格式相同,但是其合法范围不同,timestamp插入的时候会先转为UTC(时间统一时间),取出的时候在转成当地时区时间。
- MySQL允许不严格语法,任何标点符号都可以作为日期部分之间的分隔符。
字符串类型
数据类型 | 用途 |
char | 定长字符串 |
varchar | 变长字符串 |
tinyblob | 不超过255个字符的二进制字符串 |
tinytext | 短文本字符串 |
blob | 二进制格式的长文本数据 |
text | 长文本数据 |
mediumblob | 二进制形式的中等长度文本数据 |
mediumtext | 中等长度文本数据 |
longblob | 二进制形式的极大文本数据 |
longtext | 极大文本数据 |
字符串类型注意点
- 根据阿里巴巴规范,若你已经确定某个字符串的长度范围,那么优先使用char,而不使用varchar
- 根据阿里巴巴规范,varchar比较适合在长度小于5000时候使用,而如果大于5000,那么比较适合使用text类型。
后记
MySQL中的常用数据类型就这么多,当然MySQL中还有很多其他的数据类型,留待以后补充。