1. 程式人生 > >com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value:...

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

評論 沒有 inline error 解決 lin 個數 roo 觀察

在使用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必須是純數字,希望哪位大神在評論區留言,再次小弟謝過~

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