MySQL 关于 Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestam

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 关于 Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestam相关的知识,希望对你有一定的参考价值。

处理Sql查询遇到这样一个问题(数据库是mysql),有个字段定义类型是datetime,且非空无默认值,

通过phpMyAdmin界面填充测试数据的时候没有理会这个字段,看到个小警告,插入成功,

但是在取数据的时候出现这样一个错误:

Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp

 

 

 

 

JAVA连接MySQL数据库,在操作值为0timestamp类型时不能正确的处理,而是默认抛出一个异常,就是所见的:java.sql.SQLException: Cannot convert value ‘0000-00-00 00:00:00‘ from column 7 to TIMESTAMP。这一问题在官方文档中有详细说明,详见如下链接:

http://bugs.mysql.com/bug.php?id=19274

http://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html

 

JDBC连接串中有一项属性:zeroDateTimeBehavior,可以用来配置出现这种情况时的处理策略,该属性有下列三个属性值:

l exception:默认值,即抛出SQL state [S1009]. Cannot convert value....的异常;

l convertToNull:将日期转换成NULL值;

l round:替换成最近的日期即0001-01-01

 

因此对于这类异常,可以考虑通过修改连接串,附加zeroDateTimeBehavior=convertToNull属性的方式予以规避,例如:

jdbc:mysql://localhost:3306/mydbname?zeroDateTimeBehavior=convertToNull

 

   从另一个层面讲,这类异常的触发也与timestamp赋值的操作有关,如果能够在设计阶段和记录写入阶段做好逻辑判断,避免写入 ‘0000-00-00 00:00:00‘这类值,那么也可以避免出现 Cannot convert value ‘0000-00-00 00:00:00‘ from column N to TIMESTAMP的错 误。

 

环境:linux,mysql5.5.21

错误:Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts‘

原因:

  同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;

解决方法:

1、提高允许的max_connection_errors数量(治标不治本):

  ① 进入Mysql数据库查看max_connection_errors: show variables like ‘%max_connec_errors%‘;

    ② 修改max_connection_errors的数量为1000: set global max_connect_errors = 1000;

  ③ 查看是否修改成功:show variables like ‘%max_connec_errors%‘;

2、使用mysqladmin flush-hosts 命令清理一下hosts文件(不知道mysqladmin在哪个目录下可以使用命令查找:whereis mysqladmin);

  ① 在查找到的目录下使用命令修改:/usr/bin/mysqladmin flush-hosts -h192.168.1.1 -P3308 -uroot -prootpwd;

  备注:

    其中端口号,用户名,密码都可以根据需要来添加和修改;

    配置有master/slave主从数据库的要把主库和从库都修改一遍的(我就吃了这个亏明明很容易的几条命令结果折腾了大半天);

    第二步也可以在数据库中进行,命令如下:flush hosts;

 

以上是关于MySQL 关于 Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestam的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 报错:#1067 - Invalid default value for 'update_time

mssql-异常value '0000-00-00' can not be represented as java.sql.Date

错误mysql 出现 "1067 - Invalid default value for 'UPDATE_TIME' " 错误提示的解决办法

Mysql 时间格式默认空串 '0000-00-00 00:00:00' select抛出异常的解决方法

java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Date(示

Extracted SQL state class 'S1' from value 'S1009'