问题起因

之前一直使用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&amp&characterEncoding=UTF-8&amp&zeroDateTimeBehavior=convertToNull&amp&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" 问题解析的更多相关文章

  1. com.mysql.cj.exceptions.DataReadException: Zero date value prohibited

    com.mysql.cj.exceptions.DataReadException: Zero date value prohibited at com.mysql.cj.result.SqlTime ...

  2. java.sql.SQLException: Zero date value prohibited 报错分析

    今天在使用 iReview 复习词条时,发现 review 页面始终不会跳到下一个词条,应该是前台或者后台出现 BUG 了. 查看浏览器控制台,看到 500 报错,那应该是后台的问题. 登录后台,先查 ...

  3. java.sql.SQLException: Zero date value prohibited

    今天使用mybatis出现了异常 java.sql.SQLException: Zero date value prohibited 查了下原因 mysql文档上写着 Datetimes with a ...

  4. Zero date value prohibited解决方法

    发现错误 在做新需求时,建了新表,但是在测试debug中,控制台报了java.sql.SQLException: Zero date value prohibited错误 数据库用的是Date类型 实 ...

  5. Mysql 数据库date, datetime类型设置0000-00-00默认值(default)报错问题

    Mysql 数据库date, datetime类型设置0000-00-00默认值报错问题 现象:MySQL5.7版本之后,date, datetime类型设置默认值"0000-00-00&q ...

  6. MySQL的JDBC驱动源码解析

    原文:   MySQL的JDBC驱动源码解析 大家都知道JDBC是Java访问数据库的一套规范,具体访问数据库的细节有各个数据库厂商自己实现 Java数据库连接(JDBC)由一组用 Java 编程语言 ...

  7. Caused by: com.mysql.cj.exceptions.DataReadException: Zero date value prohibited

    原因:数据库日期出现零值,即0000-00-00 属于一个无效日期. 解决方案:重新赋值,或者在jdbc链接后加参数zeroDateTimeBehavior=convertToNull

  8. ES数据-MySql处理Date类型的数据导入处理

    用ES的小伙伴们,相信大家都遇到过Mapping处理Date类型的数据头疼问题吧. 不用头疼了,我来给你提供一种解决方案: 1.Maping定义为: {  "mappings": ...

  9. mysql 存储 date , datetime问题,初步

    1. java 里的 Date date = new Date()(java.util.Date) 得到  Thu Nov 03 22:19:43 CST 2016, 通过Timestamp stam ...

随机推荐

  1. @ResponseBody将集合数据转换为json格式并返回给客户端

    spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <m ...

  2. Kindeditor放置两个调用readonly错误

    开始 需要调用Kindeditor中的readonly的方法,但是一直提示edit is undefined 而editor.readonly(true)又只对第一个对象有效 所以只能换换形式,干脆将 ...

  3. MYSQL系列之(二)

    上一篇文章讲的是mysql的基本操作,这一篇会有一点难以理解,本节主要内容mysql视图,存储过程,函数,事务,触发器,以及动态执行sql 视图view 视图是一个虚拟表,其内容由查询定义.同真实的表 ...

  4. 【VUE】Mac下vue 开发环境搭建,以及目录结构

    1 安装Node.js 参看 node.js环境安装   http://www.cnblogs.com/richerdyoung/p/7265786.html 2 安装淘宝镜像 npm install ...

  5. 在fedora 18中将普通用户设置为sudo权限

    将一般的用户加入sudo组is not in the sudoers file. This incident will be reported 解决方法 在一般用户下执行sudo命令提示xxx is ...

  6. LeetCode——First Bad Version

    Description: You are a product manager and currently leading a team to develop a new product. Unfort ...

  7. 关于Java中按值传递和按引用传递的问题详解

    写了两个方法,一个是多关键字的快速排序,一个是基于多关键字的基速排序.两个方法的参数列表是一样一样的,但是快速排序正常工作,但是基数排序传出来的参数一点没有改变,苦思冥想了半天也没想通是怎么回事,于是 ...

  8. 关于Android原生Email的自己的一些认识

    http://blog.csdn.net/gloryhero/article/details/47259583 Email的框架图: Email 包含3个包:Eamil.Exchagne.Unifie ...

  9. 日志记录---log4j详解

    Apache官方项目地址 通常的日志记录的缺点是会减慢程序的运行速度,如果用普通的System.out的话影响视觉效果,另外解耦度也不好,而log4j的设计则使得日志记录变得可靠快速和可拓展性好. l ...

  10. Hive JOIN使用详解

    转自http://shiyanjun.cn/archives/588.html Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL.有了Hive,如果使用过SQL语言,并且不理解 ...