MySQL timestamp在laravel 框架中默认值失效问题

MySQL timestamp在laravel 框架中默认值失效问题

question:
为保证数据不为null 影响MySQL效率 在设计数据表时 所有字段均有默认值设定 在某些情况下会导致时间类型 timestamp 默认值0000-00-00 00:00:00失效 特此记录下
step1:
查看MySQL设置 排查是否因设置问题导致
环境:
1:Linux: 命令行登入MySQL 输入命令即可
2:window 使用图形化工具 在查询器里输入命令即可
命令:
select @@sql_mode;
查看输出 如果有 NO_ZERO_IN_DATE和NO_ZERO_DATE 则为需要修改
修改命令:
set sql_mode=(select replace(@@sql_mode,‘NO_ZERO_IN_DATE,NO_ZERO_DATE’,’’));
再执行命令查看输出
select @@sql_mode;
这里是处理之后的输出
如图 则是正常可允许默认值MySQL的设置
但可能对新建的表没有作用 需修改全局设置
如上 先查看全局设置
select @@global.sql_mode;
如果有 NO_ZERO_IN_DATE和NO_ZERO_DATE 输出则需要修改
set @@global.sql_mode=(select replace(@@global.sql_mode,‘NO_ZERO_IN_DATE,NO_ZERO_DATE’,’’));
修改之后再执行命令查看配置是否生效
select @@global.sql_mode;
至此 MySQL已支持0000-00-00 00:00:00 默认值
ps: 如果MySQL重启 或者宕机之后 配置可能失效 本人在重启MySQL 时有遇到这个问题 在重启之后注意重检配置哦~
step2:
在Laravel框架中 使用中发现 即使MySQL已经 修改过配置 在表里某些时间列为空时 插入报错 出现此情况(场景为laravel5.5) 原因为 laravel 在配置文件里开启了MySQL“严格”模式,其中包括NO_ZERO_DATE模式。 因此 即是MySQL已经支持这种默认值 但带Laravel 中就已经被拦截 并未到MySQL层
解决方案:
修改数据库配置文件 禁用“严格”模式。打开config/database.php文件,确保数据库连接显示“strict”=>false。
laravel database 设置

至此 时间类型默认值问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值