com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value:...


在使用mybatis的@Update注解的時候,報了一個這樣的錯

### Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '4028158162c347830162c347fb050000'
### The error may involve com.xwj.mapper.UserMapper.updateUser-Inline
### The error occurred while setting parameters
### SQL: UPDATE xwj_user SET last_name = ? WHERE id = 2
### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '4028158162c347830162c347fb050000'
; ]; Data truncation: Truncated incorrect DOUBLE value: '4028158162c347830162c347fb050000'; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '4028158162c347830162c347fb050000'] with root cause

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '4028158162c347830162c347fb050000'
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3974) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486) ~[mysql-connector-java-5.1.46.jar:5.1.46]

調用的方法如下:

/**
     * 更新
     */
    @Update("UPDATE xwj_user SET last_name = #{lastName} WHERE id = ${id}")
    int updateUser(@Param("lastName") String name, @Param("id") String id);

在網上看了各種解決辦法,有說是set語句中逗號誤寫成了and導致的,樓主遇到的不是這個情況

看上面的報錯,以為是數據庫中id字段(長度VARCHAR(32))為'4028158162c347830162c347fb050000'的這條數據長度過長導致的。於是將這條數據的id改為‘1’,一執行,發現執行成功。樓主便得意的以為是id過長導致的。

但心里也奇怪數據庫明明可以放32位,為啥會報錯呢?於是想一探究竟,id字段多少位時,才會報錯。於是便將id改為是'12',然后'123'...依次加,直到加到'12345678901234567890123456789012',一共32位了,仍然執行成功,這個時候樓主就懵逼了。這怎么會執行成功呢?

突然靈光一閃,觀察到有沒有可能是id中不是全數字導致的呢?於是將其中的一個數字改為字母,再執行就報錯了。功夫不負有心人,終於找到了罪魁禍首。至於為啥id必須是純數字,希望哪位大神在評論區留言,在此小弟謝過~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM