博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column xxx
阅读量:7190 次
发布时间:2019-06-29

本文共 1217 字,大约阅读时间需要 4 分钟。

hot3.png

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_modeselect @@sql_mode;# 查看全局sql_modeselect @@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');
  • 会发现错误已经出现。

转载于:https://my.oschina.net/shadowolf/blog/3005188

你可能感兴趣的文章
TOJ 5021: Exchange Puzzle
查看>>
编译时
查看>>
Android中实现两次点击返回键退出本程序
查看>>
git 教程1
查看>>
django(一)
查看>>
架构探险笔记9-框架优化之参数优化
查看>>
JS中双引号单引号,转义字符问题!!
查看>>
[Java 基础]ResultSet 指定field映射到Pojo对象的Map
查看>>
importlib 模块
查看>>
LeetCode 【235. Lowest Common Ancestor of a Binary Search Tree】
查看>>
Node学习笔记2:建立HTTP服务器和客户端之间的通信
查看>>
循环链表(隔M杀1)
查看>>
【转】C语言中access函数
查看>>
Journal List
查看>>
JavaScript-构造函数模式
查看>>
浅试 Webview 一app 加载 H5小游戏
查看>>
谈谈OpenNI 2初体验
查看>>
stars
查看>>
Boosting决策树:GBDT
查看>>
遇到502错误,invalid request block size 解决方法
查看>>