第九章:第8节 MySQL基础篇——数据类型(小数型、日期时间型)

更新于:2017-07-20 17:31:12


小数型分为这三种:


单精度浮点型: float,非精确数,通常不设定长度

双精度浮点:double,非精确数,通常不设定长度

定点型:decimal,精确数,通常,定点型需要设定长度,形式为:decimal(总长, 小数位数)


注意:


小数类型通用设定形式:类型名[(M,D)] [unsigned] [zerofill],其中M表示总位数,D表示小数点后位数,均可省略。

float和double是“不精确数”,不加位数设定更通用,而decimal是“精确数”,通常需要位数设定。

unsigned和zerofill含义同前面的整数类型。

虽然3种小数类型也支持unsigned修饰,但只是不保存负数,最大值并不因此改变。


设计数据表时,小数类型用的不多,在什么样的情况下会用到小数,多数是设计到金额的情况下。


1.png


这是楠神写的项目中用的一张金额表,每个字段都是用来存钱的,通常用decimal(15,2)设定字段的小数型。


日期时间型可分为五种:


date类型: 支持的范围为'1000-01-01'到'9999-12-31'

time类型: 支持的范围是'-838:59:59'到'838:59:59'

datetime类型:支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'

timestamp类型:时间戳,就是表示“当前时刻”,类似PHP函数now()获得的值,用于INSERT或UPDATE操作时自动获得当前时间

year类型: 四位字符串,范围为'1901'到'2155';四位数字,范围为1901到2155;两位字符串,范围为'00'到'99';两位整数,范围为1到99


注意:


year类型可以是4位整数或4位纯数字字符串,也可以是2位整数或2位纯数字字符串

timestamp表示的含义是“时间戳”,其实就是指“当前时刻”,本质上是一个数字,代表从1970年1月1日0点0分0秒到某个时间之间的秒数数值。该类型的字段值无需赋值,而是会自动取得当前时间值。


另外说明下:


MySQL虽然提供了日期时间型的数据类型,但大多数情况下可能不用它,不是程序不存时间到数据库,而是在数据库里通常存的是时间戳,用的int整数类型。为什么会这样呢?


因为如果用的datetime类型,从MySQL取出来的是时间格式的字符串,类似于这样“2017-07-20 17:31:01”,可能这个时间值需要参与到业务逻辑中,程序还得把时间“2017-07-20 17:31:01”转成时间戳,这样让PHP就多麻烦了一下。与其把整数转成字符串再转成整数,不如直接存整数进MySQL。


如果一个时间值不参与业务逻辑中,只做个纯显示作用,可以用MySQL自带的datetime类型,这样也有一个好处,用Navicat看数据库比较直观。


1.png


1.png


字段“add_time”、“success_time”都是存时间值,datetime数据类型用Navicat查看比较直观,int数据类型存的是时间戳,不直观。