发现5.6和5.7版本的创建表不一致,从5.6导出数据表创建sql文件,然后导入到5.7表会报错,timestamp不能为空

查看的sql_mode

mysql5.0以上支持的三种模式

1. ANSI
2. TRADITIONAL
3. STRICT_TRANS_TABLES
ANSI模式:宽松模式
对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
对于除数为0的结果的字段,会用NULL值代替。 TRADITIONAL模式:严格模式
当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。
用于事务时,会进行事务的回滚。使用非事务存储引擎,出现错误前进行的数据更改不会回滚,
结果是只更新的一部分 STRICT_TRANS_TABLES模式:严格模式
进行数据的严格校验,错误数据不能插入,报error错误。
如果不能将值插入到事务表中,则进行回滚。
对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。

注:

Myisam不支持事务,非事务存储引擎
Innodb支持事务,事务存储引擎
事务表(TST)和非事务表 (NTST)

支持的sql语法模式

执行sql命令可以查看sql模式

select @@sql_mode
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在严格模式下,会检查sql的语法,如果不通过则会直接报错

比如下面的字段定义,设置时间戳timestamp默认为null,会直接报错

`create_time` TIMESTAMP(0) DEFAULT NULL
`update_time` TIMESTAMP(0) DEFAULT NULL

如果把DEFAULT NULL去掉后,执行可以通过

使用show create table 表名

查看建表语句,其他建表语句省略

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

在STRICT_TRANS_TABLE模式下,

缺省时,第一个timestamp字段会为它设置当前系统时间戳,并且会随着记录的更新自动更新。

第二个及后面的timestamp列都默认设置为  年 - 月 - 日  时:分:秒

一般来说,create_time,这个创建时间第一次赋值后就不变了,而系统默认是自动更新的,不符合我们的需求。

我们需要在建表的时候主动设置默认值

`create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

等价的

`create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`update_time` timestamp,

只有第一个timestamp才会设置,第二个及后面的都是默认设置为0000-00-00 00:00:00

额外的内容:

sql_mode可以在my.ini或者my.inf文件的[mysqld]节点下进行配置

sql_mode的值

ONLY_FULL_GROUP_BY
出现在select语句、HAVING条件和ORDER BY语句中的列,必须是GROUP BY的列或者依赖于GROUP BY列的函数列。
user表有三个字段,name, age, sex
select * from user group by sex;
执行上面的sql语句会报错ERROR 1055 (42000):
select中查询的是所有列,在group by中必须全部出现才可以 select sex from user group by sex;
这句sql就可以执行通过 如果要让第一个代码能正常通过,则需要将sql_mode = ONLY_FULL_GROUP_BY ....这个配置中的ONLY_FULL_GROUP_BY去掉, select * from user group by sex;就可以正常运行
NO_ZERO_IN_DATE:日期类型字段,年月日不能全部为0
在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告 NO_ZERO_IN_DATE:
在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。 NO_ZERO_DATE:
在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告 ERROR_FOR_DIVISION_BY_ZERO:
在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。
如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL NO_AUTO_CREATE_USER:
防止GRANT自动创建新用户,除非还指定了密码。 NO_ENGINE_SUBSTITUTION:
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

mysql关于timestamp字段相关内容的更多相关文章

  1. Mysql的timestamp字段默认值设置问题

    参考: https://www.cnblogs.com/mxwz/p/7520309.html https://www.jb51.net/article/50878.htm https://blog. ...

  2. MySQL的日志相关内容

    本篇文章介绍一下mysql的备份和日志,由于备份时需要用到日志,所以在讲备份前,如果日志内容篇幅过长,将会把日志和备份分开单独来讲,先简单介绍一下mysql的日志相关内容. MySQL日志 日志是my ...

  3. 对MYSQL注入相关内容及部分Trick的归类小结

    前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇 ...

  4. mysql timestamp字段定义的

    Cause: java.sql.SQLException: Cannot convert value '2017-07-26 20:40:41.000000' from column 10 to TI ...

  5. 【mysql】在mysql中更新字段的部分值,更新某个字符串字段的部分内容

    在mysql中更新字段的部分值,更新某个字符串字段的部分内容 sql语句如下: update goods set img = REPLACE(img,'http://ozwm3lwui.bkt.clo ...

  6. mysql 5.5与5.6 timestamp 字段 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的区别

    http://www.111cn.net/database/mysql/55392.htm 本文章来给各位同学介绍关于mysql 5.5与5.6 timestamp 字段 DEFAULT CURREN ...

  7. 使用logstash读取MySQL数据传输到es,并且@timestamp字段采用MySQL中的字段时间--建议采用这个

    MySQL中数据样式 ES中数据样式 input { jdbc { jdbc_connection_string => "jdbc:mysql://192.168.0.145:3306 ...

  8. Mysql替换两个字段的内容(字符串)

    问题:用一条sql来替换两个字段的内容 表内容:  待优化sql: update student set name=CONCAT(name,dname),dname=SUBSTR(name FROM ...

  9. Hibernate5笔记8--Hibernate事务相关内容

    Hibernate事务相关内容: (1) 事务四大特性(简称ACID): (1)原子性(Atomicity) 事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行. (2)一致性(Con ...

随机推荐

  1. android sqlite select count

    用sqlite 查数据多次都没有成功,原来是sql语句不对. 正确的示例如下: select count(*) as mycount from kehu

  2. 02:OC和C对比

    1.源文件对比 C语言中常见源文件.h头文件,.c文件 文件扩展名 源类型 .h 头文件,用于存放函数声明 .c C语言源文件,用于实现头文件中声明的方法 OC中的源文件.h头文件,.m与.mm的实现 ...

  3. 第84讲:Scala中List和ListBuffer设计实现思考

    今天来学习了scala中的list和ListBuffer scala list 内部很多操作是listbuffer做的,因为改变元素,listbuffer非常高效,tl是var类型的  ,但是他属于s ...

  4. Tarjan缩点求入度为零的点的个数问题

    Description: 一堆人需要联系,但如果x 可以联系 y,你联系了x就不用联系y了,你联系一个人都会有固定的花费,问你最小联系多少人,和最小花费 Solution: Tarjan缩点,求出缩点 ...

  5. Android之TextView灵活使用

    Android之TextView灵活使用 在项目中有无遇到过这样一种程况,例如文字"王明今年10岁了", 但是数字10是从网络返回的数据, 而你又想把这个文字写在xml中, 过往我 ...

  6. iOS_UIWebView字体大小、字体颜色、背景色

    前段时间需要修改webView背景色,上stackoverflow搜了很久没有找到结果,百度搜索,各种转载,各种坑爹,搜出来的都只有字体大小和字体颜色,页面背景没有看到,本人发布方法,希望可以帮助到更 ...

  7. asp.net core mvc 中间件之WebpackDevMiddleware

    asp.net core mvc 中间件之WebpackDevMiddleware WebpackDevMiddleware中间件主要用于开发SPA应用,启用Webpack,增强网页开发体验.好吧,你 ...

  8. 转MySQL遇到的语法差异及解决方案

    最近公司项目需要从SQL Server转到MySQL, 在转的过程中遇到两者语法之间的一些差异,在网上找了解决方案后,特记录在此.由于解决方案可能有很多种,我只记录了自己使用过的,仅作参考. 1. 拼 ...

  9. C#单例类的实现

    C#单例类的实现 单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例. 实现1:懒汉式,线程不安全 该实现没有额外开销, ...

  10. Atom 清空残余数据

    rm -rf ~/.atom rm /usr/local/bin/atom rm /usr/local/bin/apm rm ~/Library/Preferences/com.github.atom ...