1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

mysql特定情况下日期类型自动转换为0导致业务异常一例

介绍

笔者是本际云服务器推荐网的小编小本本,今天带来的故障场景是MySQL特定情况下日期类型自动转换为0导致业务异常的一例。

mysql特定情况下日期类型自动转换为0导致业务异常一例

问题分析

MySQL对于日期类型字段有比较灵活的处理方式,允许在特定条件下出现0值现象。但是在正常的业务逻辑上,0值是非法的。笔者分享了一种情况是:生产MySQL5.7数据库中的一张表,业务系统对该表的日期字段赋值”,但MySQL数据库中存储的却是0值。查看参数sql_mode发现未被修改,而会话级别也没有修改。最后查看binlog,发现是一条insert ignore语句引起的该现象。而在严格模式下,启用NO_ZERO_DATE或NO_ZERO_IN_DATE,MySQL是允许insert ignore语句插入0值到日期字段并产生一个告警的。因此建议在MySQL操作时尽量避免使用insert ignore语句,并使用NULL来代替空值。

实验验证

为了验证业务系统在没修改会话级别sql_mode值的前提下,仅发出insert ignore语句便引起了该现象,笔者做了以下实验:

创建了一张测试表,在测试insert ignore语句产生0值的同时也产生日期字段被截取的告警信息。同时笔者测试了insert into、insert ignore into语句向日期字段插入NULL值时,都没报错且都是正常的日期字段合理取值。

总结:

在MySQL数据库操作时,尽量避免insert ignore语句的使用,并使用NULL来代替空值。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5817.html