首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql5.7 创建新表时提示时间戳非法

# 背景 mysql版本5.7.8,需要创建新表,研发提供的sql文件,执行后报错如下: ERROR 1067 (42000): Invalid default value for 'deleted_at...' 就猜测到时因为5.7版本的mysql默认的时间戳不允许输入0000-00-00 00:00:00这种格式,之前碰到过类似问题,需要修改配置 查看了研发提供的sql文件,果真如此: ‘create_at...` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '注册时间', # 解决 1....不希望修改配置文件,通过修改sql_model就可以了的,这种对新建表生效 SELECT @@sql_mode; 可查看sql_model,其中NO_ZERO_IN_DATE,NO_ZERO_DATE就是导致5.7...+版本无法输入0的时间戳 NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零  NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

1.5K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SpringBoot 填坑 | CentOS7.4 环境下,MySQL5.7 表时间字段默认值设置失效

    问题描述 我在本地端( windos 端,数据库版本 MySQL5.7、SpringBoot2.1.3、数据访问框架 JPA)测试代码时 current_timestamp 属性只要设有置默认值,就会自动生成数据的创建时间...`) USING BTREE ); 从上面 SQL 示例可以注意到表字段,创建时间和更新时间设置了默认值 CURRENT_TIMESTAMP(0) 。...创建用户请求 3、这是在线上服务器报的错误 ? 错误日志 问题排查 前面我说了,我已经设置了字段有默认值的。。但是为什么在线上服务器居然没有自动生成。...而且我还在日志中发现一般都是 insert 中会出错误。 尝试解决:首先我在 entity 层中删除了createtime,updatetime,果然不报空了。...注解解释 @CreatedDate //表示该字段为创建时间时间字段,在这个实体被insert的时候,会设置值 @LastModifiedDate //同理 @EntityListeners(AuditingEntityListener.class

    1.8K30

    MySQL关于时间设置的注意事项

    在MySQL 8.0.22中,如果试图在声明为TIMESTAMP NOT NULL的列中插入NULL,将会被拒绝,并产生错误。...允许为这样的列赋值为NULL,并将该列设置为当前时间戳。在MySQL 8.0.22中,如果试图在声明为TIMESTAMP NOT NULL的列中插入NULL,将会被拒绝,并产生错误。...TIMESTAMP 如果没有显式地使用NULL属性或显式默认属性声明,则自动声明为默认的’0000-00-00 00:00:00’(“零”时间戳)。...使用NOT NULL属性声明的时间戳列不允许空值。...在任何情况下,为列赋值为NULL都不会将其设置为当前时间戳。 使用NOT NULL属性显式声明且没有显式默认属性的时间戳列被视为没有默认值。对于未为此类列指定显式值的插入行,结果取决于SQL模式。

    1.9K20

    MySQL 8.0 TIMESTAMP 默认赋值问题

    TIMESTAMP默认值设置问题 前言  今天在学习MySQL的DML(增删改表的据)时,在跟着视频学习时,老师说了TIMESTAMP这个数据类型如果不为null,则默认使用当前的系统时间,来自动赋值,...但是在实际操作时并没有,而是默认为null,思考了一下可能是版本的问题(我使用的是8.0,视频教学中使用的是5.7),因此我在搜寻、探索一番后得到了解决的方案,在此记录一下 首先我们创建一个含有TIMESTAMP...'张三'); # 赋值 SELECT * FROM Test; # 查看表的内容  可以看到并没有自动应用本地时间进行赋值,而且值为NULL,就很难受,时间戳没有时间哈哈哈哈...CURRENT_TIMESTAMP); # 赋值 SELECT * FROM Test; # 查看表的内容  可以看到已经默认应用本地时间进行赋值了,但这样时间戳失去了点灵魂...# 赋值 SELECT * FROM Test; # 查看表的内容  可以看到在我们没有对insert_time进行赋值时,已经默认应用本地时间进行赋值了 总结:不同版本有不同的特性,需要我们去关注

    3.5K10

    日志信息记录表|全方位认识 mysql 系统库

    默认情况下,除Windows上的错误日志之外,其他平台的所有日志默认情况下不启用 (DDL日志只在需要时创建,并且无用户可配置选项)。...一些语法错误的SQL默认情况下也不会被记录到查询日志中,使用--low-raw选项启动Server会记录所有的原始SQL语句。...查询日志表中的时间戳信息来源于系统变量log_timestamps(包括慢查询日志文件和错误日志文件中的时间戳都来自此系统变量的值),该时间戳值在查询时可以使用CONVERT_TZ()函数或通过设置会话将从这些表中的时间戳信息从本地系统时区转换为任何所需时区...db:慢查询语句执行时的默认库名。 last_insert_id:通常为0。 insert_id:通常为0。 server_id:产生慢查询语句的server id。...慢查询日志记录的时间戳由log_timestamps系统变量控制。

    1.3K10

    MySQL 快速入门(一)

    主要存储引擎 InnoDB:MySQL5.5版本之后默认的存储引擎(默认) MyISAM:MySQL5.5版本之前默认的存储引擎,比InnoDB快,但是InnoDB更安全 memory:内存引擎,数据全部存放在内存中..., manager FROM employee WHERE manager = NULL; # 这是错误的 这个错误的原因在于将一个值与一个未知的值进行数学比较,结果仍然未知;即使是将两个空值进行比较...,结果也是未知; # 错误示例 NULL = 5; NULL = NULL; NULL !...*(n|y)$'; 严格模式 5.7版本之后默认开启了严格模式,规定多少宽度,就插入多少数据,超出报错 这里是5.6版本设置一下严格模式,保证数据格式的正确性,规定多少存多少 查看严格模式:show...03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳 create table info( id int, name varchar(32), reg_time

    1.5K31

    MySQL 8.0中DATE,DATETIME和 TIMESTAMP类型和5.7之间的差异

    本文介绍MySQL 8.0和MySQL 5.7之间的差异;本文MySQL实验环境为8.0.23; MySQL允许对DATETIME和 TIMESTAMP值使用小数秒 , 精度最高为微秒(6位数) CREATE...如果省略,则默认精度为0。 DATETIME可以使用DEFAULT和 ON UPDATE列定义子句指定 自动初始化和更新到列的当前日期和时间 TIMESTAMP[(fsp)] 时间戳。...这TIMESTAMP 对于记录“INSERT或” UPDATE操作的时间戳很有用 。...也可以TIMESTAMP通过为其分配NULL值来将任何列设置为当前日期和时间 ,除非已使用NULL,允许NULL值的属性对其进行 了定义。...如果SQL模式允许此转换,则将无效的日期、日期时间或时间戳值转换为相应类型的“零”值(’0000-00-00’或’0000-00-00 00:00:00’)。

    7.4K51

    Mysql服务器SQL模式 (官方精译)

    有关对默认SQL模式值的这些更改的更多讨论,请参阅 MySQL 5.7中的SQL模式更改。...如果这个模式和严格的模式被启用,除以零产生一个错误,除非IGNORE 给出。对于INSERT IGNORE 和UPDATE IGNORE,除以零插入NULL并产生一个警告。...如果启用了严格模式,则除以零除会产生错误,除非IGNORE给出。对于INSERT IGNORE和 UPDATE IGNORE,除以零插入NULL并产生一个警告。...下表列出了默认情况下产生错误与警告时语句行为的总结比较。默认情况下产生错误的一个例子是插入NULL到NOT NULL列中。...但为了恢复MySQL 5.7与MySQL 5.6严格模式的兼容性,并为受影响的应用程序提供更多的时间修改,MySQL 5.7.8中进行了以下更改: ERROR_FOR_DIVISION_BY_ZERO

    3.4K30

    MySQL的sql_mode模式说明及设置

    默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。...ERROR_FOR_DIVISION_BY_ZERO: 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。...和MySQL5.7默认的sql_mode模式参数是不一样的,5.6的mode是NO_ENGINE_SUBSTITUTION,其实表示的是一个空值,相当于没有什么模式设置,可以理解为宽松模式。...,因为超过了字段长度,但是并没有报错,并且mysql自行处理并接受了,这就是宽松模式的效果,其实在开发、测试、生产等环境中,我们应该采用的是严格模式,出现这种错误,应该报错才对,所以MySQL5.7版本就将...例如表中含字段TIMESTAMP列(如果未声明为NULL或显示DEFAULT子句)将自动分配DEFAULT '0000-00-00 00:00:00'(零时间戳),也或者是本测试的表day列默认允许插入零日期

    2K30

    时间戳,这样用就对了

    前言: 时间戳字段在MySQL中经常使用到,比如需要记录一行数据创建的时间或修改的时间时,我们通常会使用时间戳即timestamp字段。...在MySQL5.7版本,timestamp可以指定精度,即TIMESTAMP(fsp)中fsp可以指定一个介于0到6之间的可选值,以代表小数秒精度。值为0表示没有小数部分,如果省略,则默认精度为0。...'修改时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> insert...下面简单介绍下这两个参数对时间戳的影响。 explicit_defaults_for_timestamp参数决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。...关于时间戳,下面总结下几点经验建议,希望对你有所帮助: 数据表具有create_time、update_time时间戳字段,并设置好默认值。

    1.1K30
    领券