mysql date '0000-00-00' occur er

2018-01-19  本文已影响0人  frank3

Introduction

因为程序中可能出现不知道birthday时,会设置此字段为'', 当insert到数据库后,出现了birthday为
'0000-00-00', 后期java程序读取数据后,进行orm映射时出现birthday字段(data类型)映射失败,导致
程序异常。

Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
created_at timestamp NO CURRENT_TIMESTAMP
updated_at timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
age tinyint(4) NO 0
name varchar(50) NO
birthday date NO 1970-01-01
id created_at updated_at age name birthday
1 2018-01-19 11:12:36 2018-01-19 11:12:36 35 frank3 0000-00-00

Reason

发生此问题到原因,已经很明了了,就是对date类型插入了错误的数据,正好java orm不支持date类型
为'0000-00-00'这样的数据。


Resolve

在程序的世界里,解决任何问题,都可以条条大路通罗马,但是我们都会选取合适当前境遇的解决方案;
我们的解决方案是mysql replace 函数,因为改动源头的工作量远远超过添加一个replace的代价。

select id,created_at,updated_at,age,name,replace(birthday, '0000-00-00', '1970-01-01') as birthday from person;

id created_at updated_at age name birthday
1 2018-01-19 11:12:36 2018-01-19 11:12:36 35 frank3 1970-01-01

Tips

上一篇 下一篇

猜你喜欢

热点阅读