mysql5.6 0000-00-00 00:00:00_Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理...
往数据库里创建新表的时候报错:
[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 创建表失败处理...相关推荐
- 创建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 ...
- 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明
防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明 1.设置控制器的扇区和密码 本节说明主要介绍控制器和用户卡使用的 ...
- mysql5.7.20 sql mode_MySQL5.7中的sql_mode默认值带来的坑及解决方法
在正常项目开发过程中,如果MySQL版本从5.6升级到5.7版本.作为DBA在考虑数据库版本升级带来的影响时,一般会有几个注意点: sql_mode optimizer_switch 本文主要内容是M ...
- 单片机数码管从00到99C语言_用51单片机控制 2位数码管动态显示 00 ~ 99。
;用51单片机控制 2位数码管动态显示 00 ~ 99. ;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00. ;从 00 到 10 每隔 100ms 加 1: ;从 10 ...
- 00后整顿职场?网传一公司反手成立“专管00后部门”
据教育部统计,2022届高校应届毕业生人数高达1076万.同时,今年也是00后的第一个毕业季. 随着大批00后涌入职场,作为职场新人的他们会有什么样的表现呢?近期,"00后整顿职场" ...
- QGIS数据可视化学习笔记00——为什么用QGIS以及QGIS设置中文界面
一.为什么用QGIS? 1.qgis的概念 qgis原称Quantum GIS,是开源的桌面地理信息系统软件. qgis是一款桌面版gis软件,他是基于qt平台使用c++开发出来gis软件. 2.qg ...
- 实验内容 某学校对月工资的计算公式加下:国定工资+课 时补贴。 救授的固定工资为00每个课附补贴50元 副教授的因定工资3为00元,每个课,补贴30元 讲师的固定工资为000元、每个课时补贴20元
设计一 #include<iostream> using namespace std; class Teacher{ protected:int fixsalary;int classho ...
- Hibernate和Mysql5.1以上版本创建表出错 type=InnDB
2019独角兽企业重金招聘Python工程师标准>>> 今天将一个以前的项目数据库迁移到新的数据库上,项目使用SSH. 导入数据库后更改数据库连接信息,并且将Hibernte中的hi ...
- mysql5.5对应的hibernate_Hibernate和Mysql5.5创建表出错——type=InnDB
今天把以前做的一个项目迁移到自己的机器上,项目使用SSH. 第一次运行程序时,将Hibernte中的hibernate.hbm2ddl.auto设置成create,让Hibernate帮助自动建表,但 ...
- mysql5.1 数据类型
MySQL支持多种列类型:数值类型.日期/时间类型和字符串(字符)类型.本章首先对这些列类型进行了概述,然后更加详细地描述了各种列的类型,以及列类型存储需求的总结.概述很简单.关于具体列类型的详细信息 ...
最新文章
- linux sw状态,linux 下查看性能状态命令
- hadoop学习-mahout-Bayes分类算法示例程序
- Asp.net在IE10、IE11下事件丢失经验总结
- IDEA 控制台显示Run Dashboard
- CFS完全公平调度类
- 简单的php商城,简单的php商城
- 视频格式转换完全进阶
- oppo鸿蒙系统刷机包下载,oppo A11N原版系统rom固件刷机包下载20200716版卡刷包
- 机械制图之三棱锥的三视图
- 6410启动问题排除
- 操作系统重要知识清单:一起来搞懂进程呀!!
- TensorRT | 入门篇
- 2×3卡方检验prism_【SPSS数据分析】方差分析之多因素方差分析(3)Graphpad Prism绘制简单效应折线图...
- 无线连接中心服务器连接异常,解决Win7/Win8.1的无线网络连接受限故障
- (转)通过Net-Speeder为***提升网速
- 复习——哈夫曼树及哈夫曼编码
- [论文阅读] Action Semantics Network: Considering the Effects of Actions in Multiagent System
- 上海熙有网络科技集团有限公司获顺为资本数千万元天使轮融资
- 对Jscript操作注册表接口的一点不解
- VCS dump fsdb 波形
热门文章
- .NET 中的 GAC
- Python简易图片批量压缩程序
- 正向代理 反向代理 理解
- 无法启动计算机丢失xinput1,电脑丢失xinput13.dll怎么办?计算机丢失XINPUT1_3.dll解决办法...
- 看见更有远见的技术管理
- 火影150集碎片拾忆 记于2014-04-08
- wireshark怎么抓包和详细图文教程
- C/C++百题打卡[5/100]——合唱队形
- 团队如何提高执行力,总结以下几点:
- 中文三元组联合标注工具LAnn介绍