往数据库里创建新表的时候报错:

[Err] 1067 - Invalid default value for 'updateTime'

DROP TABLE IF EXISTS `passwd_reset`;

CREATE TABLE `passwd_reset` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`staffId` int(11) DEFAULT NULL,

`toEmail` varchar(50) DEFAULT NULL,

`token` varchar(100) DEFAULT NULL,

`validTime` int(11) DEFAULT NULL,

`createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`updateTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

mysql5.7默认为

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

改为

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语法支持类

ONLY_FULL_GROUP_BY

对于GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的。是可以理解的,因为不在 group by 的列查出来展示会有矛盾。 在5.7中默认启用,所以在实施5.6升级到5.7的过程需要注意:

ANSI_QUOTES

启用 ANSI_QUOTES 后,不能用双引号来引用字符串,因为它被解释为识别符,作用与 ` 一样。

设置它以后,update t set f1="" ...,会报 Unknown column ‘’ in ‘field list 这样的语法错误。

PIPES_AS_CONCAT

将 || 视为字符串的连接操作符而非 或 运算符,这和Oracle数据库是一样的,也和字符串的拼接函数 CONCAT() 相类似

NO_TABLE_OPTIONS

使用 SHOW CREATE TABLE 时不会输出MySQL特有的语法部分,如 ENGINE ,这个在使用 mysqldump 跨DB种类迁移的时候需要考虑

NO_AUTO_CREATE_USER

字面意思不自动创建用户。在给MySQL用户授权时,我们习惯使用 GRANT ... ON ... TO dbuser顺道一起创建用户。设置该选项后就与oracle操作类似,授权之前必须先建立用户。5.7.7开始也默认了。

数据检查类

NO_ZERO_DATE

认为日期 ‘0000-00-00’ 非法,与是否设置后面的严格模式有关。 1.如果设置了严格模式,则 NO_ZERO_DATE 自然满足。但如果是 INSERT IGNORE 或 UPDATE IGNORE,’0000-00-00’依然允许且只显示warning 2.如果在非严格模式下,设置了NO_ZERO_DATE,效果与上面一样,’0000-00-00’允许但显示warning;如果没有设置NO_ZERO_DATE,no warning,当做完全合法的值。 3.NO_ZERO_IN_DATE情况与上面类似,不同的是控制日期和天,是否可为 0 ,即 2010-01-00 是否合法。

NO_ENGINE_SUBSTITUTION

使用 ALTER TABLE或CREATE TABLE 指定 ENGINE 时, 需要的存储引擎被禁用或未编译,该如何处理。启用NO_ENGINE_SUBSTITUTION时,那么直接抛出错误;不设置此值时,CREATE用默认的存储引擎替代,ATLER不进行更改,并抛出一个 warning。

STRICT_TRANS_TABLES

设置它,表示启用严格模式。

注意 STRICT_TRANS_TABLES 不是几种策略的组合,单独指 INSERT、UPDATE出现少值或无效值该如何处理:

1.把 ‘’ 传给int,严格模式下非法,若启用非严格模式则变成0,产生一个warning

2.Out Of Range,变成插入最大边界值

3.A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition

上面并没有囊括所有的 SQL Mode,选了几个代表性的。

sql_mode一般来说很少去关注它,没有遇到实际问题之前不会去启停上面的条目。我们常设置的 sql_mode 是 ANSI、STRICT_TRANS_TABLES、TRADITIONAL,ansi和traditional是上面的几种组合。

ANSI:更改语法和行为,使其更符合标准SQL

相当于REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE

TRADITIONAL:更像传统SQL数据库系统,该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”。

相当于 STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

ORACLE:相当于 PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USE 无论何种mode,产生error之后就意味着单条sql执行失败,对于支持事务的表,则导致当前事务回滚;但如果没有放在事务中执行,或者不支持事务的存储引擎表,则可能导致数据不一致。MySQL认为,相比直接报错终止,数据不一致问题更严重。于是 STRICT_TRANS_TABLES 对非事务表依然尽可能的让写入继续,比如给个”最合理”的默认值或截断。而对于 STRICT_ALL_TABLES,如果是单条更新,则不影响,但如果更新的是多条,第一条成功,后面失败则会出现部分更新。

5.6.6 以后版本默认就是NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,5.5默认为 ‘’ 。

设置 sql_mode

查看

查看当前连接会话的sql模式:

mysql> select @@session.sql_mode;

或者从环境变量里取

mysql> show variables like "sql_mode";

查看全局sql_mode设置:

mysql> select @@global.sql_mode;

只设置global,需要重新连接进来才会生效

设置

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,'',''));

配置文件里面设置

sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

把sql_mode修改好之后,可以正常执行脚本。

二. sql文件中timestamp为什么去掉了default current_timestamp?

发现在新版的sql文件中所有的timestamp字段都去掉了default current_timestamp

在MySQL 5.7版本建表提示出错,因为MySQL 5.7 SQL_MOD默认是strict

原因:太多低于5.7版本的人反馈报错就去掉了

三.  Mysql 5.7 timestamp

Mysql 5.7 timestamp 创建时必须设置每个时间戳类型的默认值,否则报错Error : Invalid default value for 'start_time'

之前版本 默认第一个时间戳字段为defult current_timestamp,且只能设置一个默认为当前时间

链接:https://www.jianshu.com/p/75f06beca977

原文:https://blog.csdn.net/achuo/article/details/54618990

mysql5.6 0000-00-00 00:00:00_Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理...相关推荐

  1. 创建mysql的表怎么显示00_Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理...

    往数据库里创建新表的时候报错: [Err] 1067 - Invalid default value for 'updateTime' DROP TABLE IF EXISTS `passwd_res ...

  2. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明

    防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明 1.设置控制器的扇区和密码 本节说明主要介绍控制器和用户卡使用的 ...

  3. mysql5.7.20 sql mode_MySQL5.7中的sql_mode默认值带来的坑及解决方法

    在正常项目开发过程中,如果MySQL版本从5.6升级到5.7版本.作为DBA在考虑数据库版本升级带来的影响时,一般会有几个注意点: sql_mode optimizer_switch 本文主要内容是M ...

  4. 单片机数码管从00到99C语言_用51单片机控制 2位数码管动态显示 00 ~ 99。

    ;用51单片机控制 2位数码管动态显示 00 ~ 99. ;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00. ;从 00 到 10 每隔 100ms 加 1: ;从 10 ...

  5. 00后整顿职场?网传一公司反手成立“专管00后部门”

    据教育部统计,2022届高校应届毕业生人数高达1076万.同时,今年也是00后的第一个毕业季. 随着大批00后涌入职场,作为职场新人的他们会有什么样的表现呢?近期,"00后整顿职场" ...

  6. QGIS数据可视化学习笔记00——为什么用QGIS以及QGIS设置中文界面

    一.为什么用QGIS? 1.qgis的概念 qgis原称Quantum GIS,是开源的桌面地理信息系统软件. qgis是一款桌面版gis软件,他是基于qt平台使用c++开发出来gis软件. 2.qg ...

  7. 实验内容 某学校对月工资的计算公式加下:国定工资+课 时补贴。 救授的固定工资为00每个课附补贴50元 副教授的因定工资3为00元,每个课,补贴30元 讲师的固定工资为000元、每个课时补贴20元

    设计一 #include<iostream> using namespace std; class Teacher{ protected:int fixsalary;int classho ...

  8. Hibernate和Mysql5.1以上版本创建表出错 type=InnDB

    2019独角兽企业重金招聘Python工程师标准>>> 今天将一个以前的项目数据库迁移到新的数据库上,项目使用SSH. 导入数据库后更改数据库连接信息,并且将Hibernte中的hi ...

  9. mysql5.5对应的hibernate_Hibernate和Mysql5.5创建表出错——type=InnDB

    今天把以前做的一个项目迁移到自己的机器上,项目使用SSH. 第一次运行程序时,将Hibernte中的hibernate.hbm2ddl.auto设置成create,让Hibernate帮助自动建表,但 ...

  10. mysql5.1 数据类型

    MySQL支持多种列类型:数值类型.日期/时间类型和字符串(字符)类型.本章首先对这些列类型进行了概述,然后更加详细地描述了各种列的类型,以及列类型存储需求的总结.概述很简单.关于具体列类型的详细信息 ...

最新文章

  1. linux sw状态,linux 下查看性能状态命令
  2. hadoop学习-mahout-Bayes分类算法示例程序
  3. Asp.net在IE10、IE11下事件丢失经验总结
  4. IDEA 控制台显示Run Dashboard
  5. CFS完全公平调度类
  6. 简单的php商城,简单的php商城
  7. 视频格式转换完全进阶
  8. oppo鸿蒙系统刷机包下载,oppo A11N原版系统rom固件刷机包下载20200716版卡刷包
  9. 机械制图之三棱锥的三视图
  10. 6410启动问题排除
  11. 操作系统重要知识清单:一起来搞懂进程呀!!
  12. TensorRT | 入门篇
  13. 2×3卡方检验prism_【SPSS数据分析】方差分析之多因素方差分析(3)Graphpad Prism绘制简单效应折线图...
  14. 无线连接中心服务器连接异常,解决Win7/Win8.1的无线网络连接受限故障
  15. (转)通过Net-Speeder为***提升网速
  16. 复习——哈夫曼树及哈夫曼编码
  17. [论文阅读] Action Semantics Network: Considering the Effects of Actions in Multiagent System
  18. 上海熙有网络科技集团有限公司获顺为资本数千万元天使轮融资
  19. 对Jscript操作注册表接口的一点不解
  20. VCS dump fsdb 波形

热门文章

  1. .NET 中的 GAC
  2. Python简易图片批量压缩程序
  3. 正向代理 反向代理 理解
  4. 无法启动计算机丢失xinput1,电脑丢失xinput13.dll怎么办?计算机丢失XINPUT1_3.dll解决办法...
  5. 看见更有远见的技术管理
  6. 火影150集碎片拾忆 记于2014-04-08
  7. wireshark怎么抓包和详细图文教程
  8. C/C++百题打卡[5/100]——合唱队形
  9. 团队如何提高执行力,总结以下几点:
  10. 中文三元组联合标注工具LAnn介绍