簡體   English   中英

數據截斷:錯誤的日期時間值

[英]Data truncation: Incorrect datetime value

我在使用mysql db的spring項目中工作。 當每個應用程序在本地運行時,每個插入和更新sql命令都在項目的后端運行時,我收到了“ datetime”變量的這些類型異常;

由以下原因引起:java.sql.BatchUpdateException:數據截斷:錯誤的日期時間值:org.hibernate.jdbc上com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665)第1行的“ CREATION_DATE”列為“”。 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)的BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)... 54更多

Mysql版本:5.7.18,mysql-connector-java版本:-5.1.38,用戶時區在tomcat 7 vm參數和db時區中為“ -Duser.timezone = Europe / Istanbul”: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 :? -將參數[1]綁定為[VARCHAR]-9BF25A08-C442-45FA-A95F-8E59502CE037 2018-05-16 10:57:37 TRACE BasicBinder :? -將參數[2]綁定為[VARCHAR]-未完成2018-05-16 10:57:37 TRACE BasicBinder :? -將參數[3]綁定為[VARCHAR] -2018-05-16 10:57:37 TRACE BasicBinder :? -將參數[4]綁定為[TIMESTAMP]-2018年5月16日星期三10:57:32 EEST 2018年5月16日 10:57:37 TRACE BasicBinder :? -將參數[5]綁定為[VARCHAR]-2018-05-16 10:57:37 TRACE BasicBinder :? -將參數[6]綁定為[TIMESTAMP]-2018-05-16 10:57:37 TRACE BasicBinder :? -將參數[7]綁定為[VARCHAR]-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連接器已更新,但不起作用。

如果列類型是日期時間,則可以輕松地修改列並將默認值設置為CURRENT_TIMESTAMP ,這將確保插入的每個記錄都將默認為當前服務器的日期和時間。 但是,如果您是手動生成時間戳,則在應用程序上生成的數據類型將不同於在數據庫中插入時使用的數據類型。您可以使用它來修改列的默認值,然后在插入數據庫時​​將creation_type列保留為NULL 。記錄。

ALTER TABLE table MODIFY CREATION_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM