非常简单的插入语句,英文是OK的,但是中文就报错:
org.springframework.jdbc.UncategorizedSQLException:
### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xE8\xB7\x91\xE6\xAD\xA5' for column 'category' at row 1
### The error may exist in file [*****************Mapper.xml]
### The error may involve com.xx.xx.mapper.xxxMapper.add-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO `xx`(`xx`,`xx`,`xx`,`xx`,`xx`) VALUES (?,?,?,?,?);
### Cause: java.sql.SQLException: Incorrect string value: '\xE8\xB7\x91\xE6\xAD\xA5' for column 'category' at row 1
; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: '\xE8\xB7\x91\xE6\xAD\xA5' for column 'category' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xE8\xB7\x91\xE6\xAD\xA5' for column 'category' at row 1
参考网上的图,借用一下。
按照网上的方法进行排查说是字符集设置问题,但是我检查了一下,是OK的呢。
那到底是啥问题呢,不停的在连接配置那里修改尝试,都是失败的,多次失败花掉了不少时间,终于准备静下心来好好看看了。参考了如下文章:
MySQL:ERROR 1366 (HY000)错误解决 - 程序员大本营 (pianshen.com)
第一步,检查:
一.检查数据表所有字段的状态:SHOW FULL COLUMNS FROM user;
神奇的事,居然是
可数据库是utf8呢,为啥这个表是latin呢?
突然就知道原因了,这个表是从其他数据库复制过来的,复制的那个库的编码是latin的,我的天。
这篇文章记录下来,就是提醒下这种场景,复制数据表的时候会把数据表的编码格式一起复制过来。