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

【小家SQL】MySql数据类型---日期时间类型的使用(含datetime和timestamp的区别) 0000-00-00 00:00:00问题解释

as java.sql.Timestamp 通过此报错我们其实应该很敏感的得出两个结论: MySql是允许0000-00-00 00:00:00这样的值存在的(否则就会报SQL执行的错,而不是现在的封装成...java.sql.Timestamp的错) Java中(至少java.sql.Timestamp这个类)是不能支持到0000-00-00 00:00:00这个时间的。...(Timestamp.valueOf("0000-00-00 00:00:00")); 我们的解决方案有两种: 1、jdbc的url后面,追加上参数:?...zeroDateTimeBehavior=convertToNull,这样子Sql查出来的结果是null,Java进行封装就没有问题了 2、修改timestamp字段的默认值,不再采用0000-00-...00 00:00:00(一般用当前时间) 总的来说,不要给数据库字段默认值设置为0000-00-00 00:00:00,完全是给自己找麻烦。

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

    导入数据库时报错1067 – Invalid default value for ‘field’

    最近在优化yii主题时,修改了一个yii主题中新增的数据库字段名称,在更新数据库时,mysql报了1067-Invalid default value for 'comment_date'这样的错误,当时执行的是下面这条语句...,comment_date这个字段的默认值是无效的,这个问题有些令我不解(我的疑问:WordPress能建表成功,为什么会出现默认值无效的情况呢),后来突然想起我在yii主题成形的时候,对运行环境进行过一次升级...如果是MySQL升级导致的问题,那么是什么原因呢,错误报告的是默认值无效,也就是说默认值是被限制的,那么先检查一下表结构: mysql> DESC wp_comments; +-------------...-00-00 00:00:00 | | | comment_date_gmt | datetime | NO | MUL | 0000-00...0000-00-00 00:00:00,数据类型是datetime,在时间格式使用这种默认值是很常见的,在5.7下难道不兼容??

    1.1K40

    Mysql配置文件 扩展详细配置(下)

    ,将变量改为true即可 ERROR 1067 (42000): Invalid default value for ‘ctime’ =false时,按照如下规则”初始化”: 未明确声明为NULL属性的...第一个之后的TIMESTAMP列(如果未声明为NULL属性或显式DEFAULT子句)将自动分配DEFAULT’0000-00-00 00:00:00’(“零”时间戳)。...对于不指定此列的显式值的插入行,该列将分配“0000-00-00 00:00:00”,并且不会发生警告。...声明为NOT NULL且没有显式DEFAULT子句的TIMESTAMP列被视为没有默认值。 对于不为此列指定显式值的插入行,结果取决于SQL模式。 如果启用了严格的SQL模式,则会发生错误。...如果未启用严格的SQL模式,则会为列分配隐式默认值“0000-00-00 00:00:00”,并发出警告。 这类似于MySQL如何处理其他时间类型,如DATETIME。

    1.1K20

    由一条create语句的问题对比mysql和oracle中的date差别 (r7笔记第26天)

    (42000) at line 1: Invalid default value for 'create_time' 首先这个看起来不是一个语法问题,部署使用的环境是5.5 这个时候手头有一套虚拟机测试环境...create table test(col1 datetime DEFAULT CURRENT_TIMESTAMP); ERROR 1067 (42000): Invalid default value...> create table test(col1 datetime DEFAULT ''); ERROR 1067 (42000): Invalid default value for 'col1' 添加空值...同时查看了一些文章,有的说不能添加默认值,这个说法应该是不成立的,只能说是不能添加动态的默认值。还有一种说法是default的动态默认值是在5.6.5才开始支持。...如果上面的问题在oracle中,是否可以支持动态的默认值呢,肯定可以,因为我们似乎已经习惯这么用了。 可以用下面的方式来指定。

    1.3K90

    技术分享 | MySQL 的 TIMESTAMP 类型字段非空和默认值属性的影响

    ,提示为字段 updatetime 设置了无效的默认值, ERROR_GENERAL "Handling new table 'test'.'...(3) 在第一个列之后的 TIMESTAMP 列,如果没有明确地用 NULL 属性或明确的 DEFAULT 属性来声明,就会自动声明为 DEFAULT '0000-00-00 00:00:00' 。...对于插入的行,如果没有为该列指定明确的值,那么该列将被分配为 '0000-00-00 00:00:00' ,并且不会发生警告。...根据是否启用了严格的 SQL mode 或包含 NO_ZERO_DATE 的 SQL mode ,默认值 '0000-00-00 00:00:00' 可能是不被允许的。...'0000-00-00 00:00:00',但是这个 MySQL 5.7.20 的 sql_mode 变量包含了 NO_ZERO_DATE 规则,因此默认值'0000-00-00 00:00:00'不被允许

    5.1K20

    MySQL sql_mode应该如何指定

    转成默认存储引擎STRICT_TRANS_TABLESINSERT、UPDATE出现少值或无效值该如何处理直接报错Warning 超限类型值被截断 非空约束允许空NO_ZERO_DATE在严格模式...,认为日期'0000-00-00'非法 - - NO_ZERO_IN_DATE - - ERROR_FOR_DIVISION_BY_ZERO 在严格模式,在INSERT或UPDATE过程中,如果被零除...(或MOD(X,0)),则产生错误 - - SQL语法支持类ONLY_FULL_GROUP_BY对于GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY子句的列,没有在GROUP...,保证错误数据不能插入,报error错误。...用于事物时,会进行事物的回滚。日期类型中的月和日部分不能包含0,不能有0这样的日期(0000-00-00),数据不能除0,禁止grant自动创建新用户等一些校验。

    2.1K30

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

    对于STRICT_TRANS_TABLES, MySQL将一个无效的值转换为最接近的有效值,然后插入调整后的值。如果缺少一个值,MySQL将为列数据类型插入隐式的默认值。...根据启用的是strict SQL模式还是NO_ZERO_DATE SQL模式,默认值“0000-00-00 00:00:00”可能无效。...对于为这样的列指定NULL的插入,如果启用了strict SQL模式,那么单行插入会出现错误,或者禁用了strict SQL模式的多行插入会插入’0000-00-00 00:00:00’。...使用NOT NULL属性显式声明且没有显式默认属性的时间戳列被视为没有默认值。对于未为此类列指定显式值的插入行,结果取决于SQL模式。如果启用了严格SQL模式,则会出现错误。...如果没有启用严格的SQL模式,则使用默认隐式值’0000-00-00 00:00:00’声明该列,并出现警告。

    1.9K20

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

    禁用严格模式后,会生成'2004-04-31'转换为 无效日期 '0000-00-00'和警告。启用严格模式后,无效的日期会生成错误。...如果启用了此模式和严格模式, '0000-00-00'则不允许插入,并且插入会产生错误,除非 IGNORE给出。...因为 STRICT_TRANS_TABLES,MySQL会将无效值转换为列的最接近的有效值并插入调整后的值。如果缺少一个值,MySQL将插入列数据类型的隐式默认值。...无论哪种情况,MySQL都会生成警告而不是错误,并继续处理语句。第11.7节“数据类型默认值”中介绍了隐式默认值。...严格SQL模式适用于以下错误,表示输入值无效或缺失的一类错误。如果列的数据类型不正确,或者可能超出范围,则该值无效。

    3.4K30

    mysql 关于时间类型的刨坑之路

    问题背景 前两天有做一个基于binglog的数据库实时同步,一张老数据表里有DATETIME、TIMESTAMP不同的时间字段类型,看起来值都是一样的,并且默认值都设置的 0000-00-00 00:00...因为本文的翻译者水平比较差, 翻译的初衷也是想顺便提升下英语能力,导致下面的有很多地方读起来可能并不是很通顺,但过分加工怕会是错误的描述.所以如果有误导读者地方,本文概不负责 原版文档链接或直接阅读原文...无效的DATE, DATETIME, or TIMESTAMP 值会被修改为0 即合适的类型(('0000-00-00' or '0000-00-00 00:00:00')) MySQL permits...MySQL 不接受 TIMESTAMP的值(在天或者月份里只有一个0,在MySQL中这是无效的日期)。这条规则唯一的例外是0它被理解为'0000-00-00 00:00:00'。...范围在70-99年的被修改为1970-1999. ----还没有完---- ? 问题总结: 1. 无效的值和默认设置0000-00-00 00:00:00,显示值插入会报错。

    1.7K30
    领券