mysql 中有个timestamp类型
今天使用了忽然发现执行发现
Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理

解决方案

mysql5.7默认为

1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

改为

1
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

这样之前插入语句就能正常执行了

sql_mode 常用值说明

官方手册专门有一节介绍 https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html 。 SQL Mode 定义了两个方面:MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。

设置 sql_mode

1
2
3
4
5
6
7
查看当前连接会话的sql模式:
mysql> select @@session.sql_mode;
或者从环境变量里取
mysql> show variables like "sql_mode";
查看全局sql_mode设置:
mysql> select @@global.sql_mode;
只设置global,需要重新连接进来才会生效

设置

1
2
3
4
5
6
7
mysql> set sql_mode='';
mysql> set global sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
如果是自定义的模式组合,可以像下面这样
Adding only one mode to sql_mode without removing existing ones:
mysql> SET sql_mode=(SELECT CONCAT(@@sql_mode,','));
Removing only a specific mode from sql_mode without removing others:
mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'',''));

忽然发现这样写电脑重启重启mysql就又要设置
那我们就去修改下配置文件吧(忽然发现mac没有my.cnf配置文件)
那就自己写一个把 放在/usr/local/etc/

1
2
[mysqld]
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION