数据截断:日期时间值不正确

时间:2018-05-15 15:00:50

标签: java mysql hibernate jdbc

我在一个使用mysql db的spring项目中工作。当应用程序在我的本地运行时,当每个insert和update sql命令在项目的后端运行时,我得到了“datetime”变量的这些类型异常;

  

引起:java.sql.BatchUpdateException:数据截断:日期时间值不正确:''对于第1行的'CREATION_DATE'列       在com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665)       在org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)       在org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)       ... 54更多

Mysql版本:5.7.18,mysql-connector-java版本:-5.1.38,用户时区是tomcat 7 vm参数中的“-Duser.timezone = Europe / Istanbul”和db timezone:GMT +3

示例代码块;

        ResponseCreateTicket response = new ResponseCreateTicket();
        TicketDTO ticket=new TicketDTO();
ticket.setTicketNumber(UUID.randomUUID().toString().toUpperCase(Locale.ENGLISH));
        ticket.setStatus(TicketStatus.UNCOMPLETED.toString());
        Date date = new Date();
        ticket.setCreatedOn(date);
        ticket.setReferenceNumber(request.getReferenceNumber());
        getTicketDAO().createTicket(ticket);
        response.setTicketNumber(ticket.getTicketNumber());
        return response;

sql hibernate显示并绑定参数;

  

休眠:插入eis_ticket(TICKET_NUMBER,STATUS,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,REFERENCE_NUMBER,ID)值(?,?,?,?,?,?,?,?)   2018-05-16 10:57:37 TRACE BasicBinder:? - 作为[VARCHAR]的绑定参数[1] - 9BF25A08-C442-45FA-A95F-8E59502CE037   2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数[2]为[VARCHAR] - UNCOMPLETED   2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数[3]为[VARCHAR] -    2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数[4]为[TIMESTAMP] - Wed May 16 10:57:32 EEST 2018   2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数[5]为[VARCHAR] -   2018-05-16 10:57:37 TRACE BasicBinder:? - 作为[TIMESTAMP]的绑定参数[6] -   2018-05-16 10:57:37 TRACE BasicBinder:? - 作为[VARCHAR]的绑定参数[7] - b4be9b87-21c4-4001-b80d-244420ab2e00   2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数[8]为[BIGINT] - 1925   2018-05-16 10:57:37错误JDBCExceptionReporter:? - 数据截断:日期时间值不正确:''第1行的'CREATION_DATE'列

日期格式可以更改为“yyyy-MM-dd HH:mm:ss”,但项目中有数百种这些类型的代码,因此它不是正确的解决方案。什么可能导致这个问题? Mysql连接器已更新但无效。

1 个答案:

答案 0 :(得分:0)

如果列类型是日期时间,则可以轻松修改列并将默认值设置为CURRENT_TIMESTAMP,这将确保插入的每个记录都将默认为当前服务器的日期和时间。但是,如果要手动生成时间戳,则应用程序上生成的数据类型与插入数据库时​​使用的数据类型不同 您可以使用它来修改列默认值,然后在插入记录时保留creation_type列NULL

ALTER TABLE table MODIFY CREATION_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;