MySQL "Zero date value prohibited" 问题解析
问题起因
之前一直使用Oracle数据,对MySQL数据库使用不多,因此搞不懂MySQL的日期“0000-00-00 00:00:00”对程序会产生怎样的影响。费了我一下午的时间 -_-^^。
首先:Google “Zero date value prohibited”一番,发现问题的原因是表中日期的字段中有值为 0 的数据。SELECT * FROM shop_info_sub t WHERE t.lasttime=0 执行SQL果然有日期为“0000-00-00 00:00:00”的数据
第二:发现问题后在程序中(当前的是Spark工程)filter/where/drop column 都没有用,本地执行代码还是报各种错。
第三:当前工程中有使用 UDF函数对关键字段加密,遂想到干脆也对这个字段进行处理。于是在java代码中在写一个对这个日期的字段进行转空处理。结果又出现转换的前后日期对不上。。。又 Google “0000-00-00 00:00:00 date不对”
最后:到这里才知道 SQL 中的日期最小值应该是“1900-01-01 00:00:00”不可以比这个值再小了,再小的话就报错
异常截图:

坑人的数据:

解决方案
找到问题根源就好办了。
1、删除数据库中“0000-00-00 00:00:00”字段,因为是数据错误 (在当前情况不能修改生产数据)
2、编写处理数据为“0000-00-00 00:00:00”字段的方法(可取,但是需要修改每一处有数据为“0000-00-00 00:00:00”的代码段)
3、在 URL 中添加 zeroDateTimeBehavior(最简便)
private val URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&&characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull&&transformedBitIsBoolean=true&useSSL=true"
conn_str="jdbc:mysql://${hostname}/${db_name}?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useSSL=true&dontTrackOpenResources=true&defaultFetchSize=10000&useCursorFetch=true"
MySQL "Zero date value prohibited" 问题解析的更多相关文章
- com.mysql.cj.exceptions.DataReadException: Zero date value prohibited
com.mysql.cj.exceptions.DataReadException: Zero date value prohibited at com.mysql.cj.result.SqlTime ...
- java.sql.SQLException: Zero date value prohibited 报错分析
今天在使用 iReview 复习词条时,发现 review 页面始终不会跳到下一个词条,应该是前台或者后台出现 BUG 了. 查看浏览器控制台,看到 500 报错,那应该是后台的问题. 登录后台,先查 ...
- java.sql.SQLException: Zero date value prohibited
今天使用mybatis出现了异常 java.sql.SQLException: Zero date value prohibited 查了下原因 mysql文档上写着 Datetimes with a ...
- Zero date value prohibited解决方法
发现错误 在做新需求时,建了新表,但是在测试debug中,控制台报了java.sql.SQLException: Zero date value prohibited错误 数据库用的是Date类型 实 ...
- Mysql 数据库date, datetime类型设置0000-00-00默认值(default)报错问题
Mysql 数据库date, datetime类型设置0000-00-00默认值报错问题 现象:MySQL5.7版本之后,date, datetime类型设置默认值"0000-00-00&q ...
- MySQL的JDBC驱动源码解析
原文: MySQL的JDBC驱动源码解析 大家都知道JDBC是Java访问数据库的一套规范,具体访问数据库的细节有各个数据库厂商自己实现 Java数据库连接(JDBC)由一组用 Java 编程语言 ...
- Caused by: com.mysql.cj.exceptions.DataReadException: Zero date value prohibited
原因:数据库日期出现零值,即0000-00-00 属于一个无效日期. 解决方案:重新赋值,或者在jdbc链接后加参数zeroDateTimeBehavior=convertToNull
- ES数据-MySql处理Date类型的数据导入处理
用ES的小伙伴们,相信大家都遇到过Mapping处理Date类型的数据头疼问题吧. 不用头疼了,我来给你提供一种解决方案: 1.Maping定义为: { "mappings": ...
- mysql 存储 date , datetime问题,初步
1. java 里的 Date date = new Date()(java.util.Date) 得到 Thu Nov 03 22:19:43 CST 2016, 通过Timestamp stam ...
随机推荐
- /usr/local/java/jdk1.8.0_11
- flag - 待浏览学习网站
学习:gulp+jade(pug)+sass 待浏览网站如下:http://www.ydcss.com/archives/18#lesson1 https://nodejs.org/en/ https ...
- MS17-010永恒之蓝验证
一.安装MSF,windows下安装也可以,直接安装kali也可以,我是kali是攻击主机,win7是靶机,都在虚拟机里. 1.windows下安装MSF请参考:http://blog.csdn.ne ...
- [XML] CoolFormat
http://files.cnblogs.com/files/wjs16/CoolFormat3.4.rar
- angular -- post请求该如何使用?
angularjs 的post 请求该如何调用? 简单示例: // post 携带参数访问 $http({ method:'post', url:postUrl, data:{name:"a ...
- vue 引入通用 css
1.在入口 js 文件 main.js 中引入,一些公共的样式文件,可以在这里引入. import Vue from 'vue' import App from './App' // 引入App这个组 ...
- Redis讲解
buffer 缓冲 用于写 cache 缓存 用于读 redis 支持持久化 安装redis yum -y install redis 配置文件/etc/redis.conf 是否在后台运行 ...
- codeforces#512 Div2
pre过了三题 终测又挂了一题 又掉分了 真的是 太菜了 A-In Search of an Easy Problem 水题 有一个1就是hard #include <bits/stdc++.h ...
- 在idea中为函数自动生成注释(解决注释无法出现形参的情况)
1 点击“File”-->“Settings”-->“Live Templates”打开如下对话框,点击右边绿色的加号,创建一个自定义的Template Group,如“Java” 2.选 ...
- postman app支持浏览器上的cookie
1. 安装postman app 注意要安装postman application(一个应用软件),而不是chrome 插件,打开下面的这个开关 2. chrom浏览器 给chrom浏览器安装pos ...