欢迎来到疯狂MySQL系列的第三节
上一节咱们终于开始用MySQL干正事了——增删改查
本节咱们将详细地介绍MySQL的数据类型,学习完本节,相信你能够对MySQL的数据类型不再模糊
数值类型
整数型
默认都是有符号位的 ,如果要使用无符号,请在前面加 UNSIGNED
INT(显示位数,包含符号位),表中列出了默认显示位数,也可以自己指定
宽度只是用于显示,与其存储空间并没什么关系,注意,如果是有符号的,负号也是要占用一个显示位的,比如 TINYINT 有符号最小为 -128,就是占用了 4 位显示位
浮点型
以上3种类型都可以指定位数,比如 : FLOAT(M, D) ,表示一共M位数字位,D位是小数的数位, 比如,FLOAT(6, 2)表示,一共有6位数,其中小数有2位
DECIMAL 类型最高存储38位
如果插入数据超出存储范围,就进行四舍五入
尽量避免进行浮点数比较
日期与时间类型
YEAR 在使用时,插入字符串或者普通数字都可以,例如:’1991’ 或 1991 都可以
TIME 格式可以没有分隔符’:',但是时分秒必须都有意义,否则插入的是00:00:00,比如 101112 有意义,而 109712 没有意义,因为 97 已经超过了 60
TIME 除了列表中的格式外,还可以有以下的格式。HH:MM,D HH:MM,D HH,SS,D 表示日,可以取 0 ~ 34 之间的值,插入时,D 被转换为小时,在小时那一栏将会存储为 24*D + HH
DATETIME 在存储时,输入什么就是什么;而 TIMESTAMP 会根据当地时区进行换算成UTC时间后存储,查询时,也会进行换算成当地时间
DATETIME 范围:1000-01-01 00:00:00.000000 - 9999-12-31 23:59:59.999999
TIMESTAMP 范围:1970-01-01 00:00:01.000000 UTC - 2038-01-19 03:14:07.999999 UTC
UTC时间为全球统一协调时间,相当于一个全球标准时间,如果要换算成当地时间,需要加上当地的时区,比如咱们中国是东八区,则加8小时就可以啦
文本字符串类型
超过指定的字符串最大长度则不会插入,并报错
TEXT 用于存放文章,评论等
总结:以上就是MySQL常用的数据类型了,接下来我们再详细讲解开发当中最常用的一些类型
TINYINT
这个我们通常用来存一些状态值,或者 bool 类型的值,比如男女,是否,等等
INT 和 BIGINT
这个主要用作数据库的主键或者逻辑外键,通常建议使用 UNSIGIN 无符号的类型
FLOAT 和 DOUBLE
对于一般精度来讲,FLOAT 就足够了,不足的话 DOUBLE 来顶~ 如果是设计金融类容不得半点闪失的,最好使用 DECIMAL 类型
TIMESTAMP
我们每张表,最好都加一个 created_time和 updated_time 作为表的一个时间记录,在定位数据的新增和修改也很方便。这个时候就需要使用 TIMESTAMP 类型了,数据库统一存储 UTC 时间,查询的时候自动转为该时区的时间,不需要我们手动转换;示例如下
`created_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
VARCHAR(M)
在我们指定了表字符集为 UTF8MB4 时候,相应的字符串类型也会使用该类型,这是变长字符串类型,当你不确定你的字符串大小的时候,可以使用这个,M 指定为最多 M 个 字符,也就是说最多占用 M * 每个字符所占用的字节数,比 CHAR(M) 更节省空间
最后
以上就是对MySQL常用数据类型的总结,希望能对你的数据库学习之路带来帮助,下一节我们将会继续学习更高阶的查询语句,敬请期待~
说明:本文首发于知乎专栏,同步于 简书 以及 CSDN 等平台,转发必须注明出处,违规转载必究