MySQL时间更新、时区错误、自动填充0的问题

460 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

数据库时间更新问题

在数据库更新用户信息的时候,每次都会更新注册时间,这一波我属实是懵逼了。

起初以为是mybatis顺带把注册时间给更新了,然后排查了一下代码,没发现问题,打开mybatis日志一看,sql语句也都正确,完全没有看到更新注册时间的代码。

转念一想,没准是数据库的问题。

于是到数据库里去查看这张表,发现注册时间这个字段勾选了根据当前时间戳更新的选项,突然懂了,原来这个选项是每次更新内容都会把这个字段给更新了。取消之后再测代码,一切正常。

image-20220516104659088

数据库时区错误问题

今天调试了一下某个接口,涉及到时间的,我是从Java里面获取当前时间然后转到数据库里的(其实我觉得用数据库里的 now 也可以),然后就出问题了,存进去的时间比实际时间要慢几个小时。

我仔细一想,不会是 new Timestamp(System.currentTimeMillis()); 这句代码获取的时间又问题吧,果断测试了一下,发现并不是它的问题,那就肯定是数据库的问题了,但是我看数据库自动更新时间戳的那个时间又是对的。想了一下,可能是转过去的时候,时区的问题。

之前写yaml配置文件的时候,一直跟着老师写的,老师也是这么写的 ?serverTimezone=UTC ,结果我一百度,好家伙,这个时区是世界统一时间,比北京时间慢8小时,改成 serverTimezone=Asia/Shanghai 就解决了。

请添加图片描述

数据库填充0

在mysql5.6中,int等数字类型可以选择 填充0

image-20221005211719724

填充0的意思不是说默认值为0,而是指 在显示的时候,默认向左侧填充0,同时这个参数还与字段设置的位数有关,比如 20 会显示成 0000000020 ,当然左侧的0不一定跟我写的一样多,这里我只是打个比方。

image-20221005211817358

如果不想要自动填充这么多位0,直接取消填充零这个选项就可以了