现象:
MySQL jdbc连接异常信息中文乱码
java.sql.SQLException: Incorrect integer value: 'ä½ å¥½' for column 'user_id' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1749)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1666)
原因:
1. 类com.mysql.jdbc.ConnectionImpl中的属性errorMessageEncoding 默认不是utf8
2. MySQL驱动版本过低,5.1.18的版本乱码,更换为5.1.40版本就没问题了。
errorMessageEncoding = "Cp1252";
解决:
1. 方法一,可以使用反射设置errorMessageEncoding =utf8
//解决MySQL jdbc异常信息中文部分乱码问题
if (是MySQL驱动连接){
Field field = conn.getClass().getSuperclass()
.getDeclaredField("errorMessageEncoding");
field.setAccessible(true);
field.set(conn, "UTF-8");
}
2.方法二,
MySQL驱动版本过低,5.1.18的版本乱码,更换为5.1.40版本就没问题了。