问题起因

之前一直使用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. iOS性能调优系列(全)

    总结: 三类工具 基础工具 (NSLog的方式记录运行时间.) 性能工具.检测各个部分的性能表现,找出性能瓶颈 内存工具.检查内存正确性和内存使用效率 性能工具: 可以衡量CPU的使用,时间的消耗,电 ...

  2. linux 学习的一些书单,对了解android 也有大用

    要推荐的书,我在<那两年炼就的Android内功修养>这篇文章中有提到,这里再列一下出来: 语言类: <深度探索C++对象模型>,对应的英文版是<Inside C+++  ...

  3. html-withimg-loder

    由于 webpack 对 html 的处理不太好,打包 HTML 文件中的图片资源是相对来说最麻烦的.这里需要引用一个插件—— html-withimg-loder // 打包 HTML 文件中的图片 ...

  4. 2012Noip提高组Day2 T3 疫情控制

    题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到 ...

  5. mysql导出csv文件excel打开后数字用科学计数法显示且低位变0的解决方法

    Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0. Excel打开csv文件时,只要字段值都是数字,它 ...

  6. Windows Phone 几种页面间传递数据的方式

    首先,我们要引用:using Microsoft.Phone.Shell; 第一种: // 导航到新页面 NavigationService.Navigate(new Uri("/Detai ...

  7. awk中的冒泡排序

    算法中经典的排序方式,今也用awk来实现下,代码如下: BEGIN { count=} {arrary[count]=$ count++ } END{ ;i>-;i--) { ;j<i;j ...

  8. Hibernate数据类型映射

    Hibernate映射类型分为两种:内置的映射类型和客户化映射类型.内置映射类型负责把一些常见的Java类型映射到相应的SQL类型:此外,Hibernate还允许用户实现UserType或Compos ...

  9. 微信小程序 --- Image组件

    Image组件可以在小程序中展示图片,支持外链. Image组件可以调用API,进行三种缩放,九种裁剪. Image组件有默认值:300*225 属性: src:图片资源地址. mode:图片裁剪缩放 ...

  10. 电子商务(电销)平台中订单模块(Order)数据库设计明细

    电子商务(电销)平台中订单模块(Order)数据库设计明细 - sochishun - 博客园 http://www.cnblogs.com/sochishun/p/7040628.html 电子商务 ...