MySQL建表语句

建表语句:

1067 - Invalid default value for 'end_time', Time: 0.000000s

CREATE TABLE `user_info` (
  `uid` bigint(10) NOT NULL,
  `user_status` tinyint(4) NOT NULL,
  `user_type` tinyint(2) NOT NULL,
  `user_ctime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `user_mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`uid`),
  KEY `status_uid` (`user_status`,`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

分析原因:

-- mysql 日期报错 
1067 - Invalid default value for 'end_time', Time: 0.000000s
-- 原因:mysql从5.7开始,默认是严格模式,严格遵从SQL92规范。
mysql> show variables like 'explicit_defaults_for_timestamp'; 
-- 执行结果:变量explicit_defaults_for_timestamp的value值为off。
mysql> show variables like 'sql_mode';
-- 执行结果
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

解决问题:

-- 更新系统变量
set sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- 检查SQL
show variables like 'sql_mode';
-- 执行建表SQL
-- 执行结果:OK
-- 重启mysql
brew services restart mysql
-- 重启之后 系统变量重新在配置文件里加载会再次恢复
show variables like 'sql_mode';
-- 永久更新 系统变量 方法
-- 1.找到加载的配置文件路径
mysql --help|grep 'my.cnf';
执行结果:/etc/my.cnf 
				/etc/mysql/my.cnf 
				/usr/local/etc/my.cnf 
				~/.my.cnf
-- 2.修改配置文件路径中的对应项
进入:cd /usr/local/etc/
修改:vi my.cnf
sql_mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
ESC:wq
-- 3.重启MySQL验证修改
brew services restart mysql
mysql -u root -p
show variables like 'sql_mode';

实际SQL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值