我在一个使用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连接器已更新但无效。
答案 0 :(得分:0)
如果列类型是日期时间,则可以轻松修改列并将默认值设置为CURRENT_TIMESTAMP
,这将确保插入的每个记录都将默认为当前服务器的日期和时间。但是,如果要手动生成时间戳,则应用程序上生成的数据类型与插入数据库时使用的数据类型不同
您可以使用它来修改列默认值,然后在插入记录时保留creation_type列NULL
。
ALTER TABLE table
MODIFY CREATION_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;