文档章节

Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column xxx

易冥天
 易冥天
发布于 01/23 18:33
字数 371
阅读 13
收藏 0

1. 错误提示


Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column xxx

2. 问题分析


  • 从上面的描述我们可以看出原因是:我们给类型是datetimexxx字段赋值0000-00-00 00:00:00是不被支持的,赋值包含两种情况:
    • 情况一:我们直接提供的值就是0000-00-00 00:00:00
    • 情况二:xxx字段我们没有提供值,默认值是0000-00-00 00:00:00

3. 原因分析


  • 原因是我们的数据库不支持datetime为0的情况,这是一个模式的设置。

4. 具体解决


  1. 查看sql_mode

    # 查看当前sql_mode
    select @@sql_mode;
    # 查看全局sql_mode
    select @@global.sql_mode;
    
  2. 修改sql_mode(将上述查询到的sql_mode中的NO_ZERO_DATENO_ZERO_IN_DATE删除即可)

    # 修改全局
    set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    # 修改当前
    set @@sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    

5. 模拟上面错误的产生


1. 创建数据库

create database sql_model_test_db;

2. 创建数据表

use sql_model_test_db;
create table sql_mode_test(id int primary key auto_increment, col2 varchar(64), cur_date datetime not null default '0000-00-00 00:00:00');

3. 设置sql_mode

set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE';
set @@sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE';

4. 插入一条记录

insert into sql_mode_test(col2) value ('test1');
  • 会发现错误已经出现。

© 著作权归作者所有

共有 人打赏支持
易冥天
粉丝 31
博文 148
码字总数 74587
作品 0
海淀
程序员
私信 提问
MySql str_to_date函数与%Y-%m-%d%H:%i 问题简记

STRTODATE(concat(c.departuredate, c.departuretime), '%Y-%m-%d%H:%i') < ?) ### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect datetime value: '20......

重城重楼
2018/04/11
0
0
MySQL异常问题解决方案小结

1.Mysql中文存储乱码 2.Mysql emoji表情数据存储异常 3.Mysql启动错误:Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist. 4.异常:server: "Host '19......

李朝强
2018/07/04
0
0
oracle --date-对应 mysql 时间类型的以及空值的处理

因为在做Oracle---->mysql的数据迁移的时候,发现Oracle中的date类型,对应的mysql的时间类型设置不当容易引起错误,特别是存在空值的时候 mysql 版本 5.6.40版本 mysql> desc t1; +-------...

bjxiangqian
2018/05/11
0
0
【mysql】自动记录"创建日期"和"更新日期"

MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值! 否则,在MySQL中要记录创建日期还得使用datetime 然后使用NOW() 函数完成! 1,TIMESTAMP DEFAULT C...

SibylY
2014/12/04
0
0
Mysql表操作和 DECIMAL(N,M)数据类型

sql:删除表中的列 alter table KRIDATAITEMINFO drop column SELECTCOLUMNS; 为表添加列 alter table KRIDATAITEMINFO add column ITEMVALUEID_ varchar(64); alter table lft_product add c......

xpttxsok
2016/06/07
16
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里的Java岗面试到底有多难?这些常问技术原理你能答出多少!

阿里面试喜欢问哪些? 阿里的面试特别喜欢面试技术原理,特别是 数据结构 多线程并发 NIO 异步消息框架 分布式相关的缓存算法等 JVM的加裁过程和原理 垃圾回收算法 以及具体使用过的框架,会...

java知识分子
26分钟前
2
0
hibernate入门

下载和导包 下载hibernate 导入数据库驱动包 导入hibernate必要包 lib/required 导入日志记录的包 创建数据库和数据库实体 package com.company.domain;public class Customer { ...

gwl_
32分钟前
1
0
快速体验 Sentinel 集群限流功能,只需简单几步

️ Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器。 Sentinel 从 1.4.0 ...

阿里云云栖社区
32分钟前
1
0
元数据注册系统:命名和标识原则

名词定义 对象类术语 对象类是概念、抽象或客观事物的集舍,它们具有明确的边界和含义,且其特性和行为都遵循相同的规则。一个对象类术语可以是管理项概念域、数据元概念和数据元的名称的一部...

十动然拒
41分钟前
1
0
抽丝剥茧:生产环境中负载均衡产品DPDK问题的解决

ULB4是UCloud自主研发的基于DPDK的高可用四层负载均衡产品,转发能力接近线速;DPDK则是一个高性能的开源数据面开发套件。ULB4作为用户应用的全局入口,在大流量多元化场景下保证用户业务的持...

UCloudTech
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部