报错现象:
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO B_ITEM_ORDER66 (ORDER_SERIAL_NUMBER,ORDER_CODE,ITEM_CODE,ITEM_NAME,B_CUST_NO,S_CUST_NO, UNIT_PRICE,NUMBER,FREIGHT_PRICE,TOTAL_PAY_PRICE,PAYMENT_METHOD, ORDER_STATUS,CUST_NAME,MEMBER_PHONE,S_ADDRESS,CREATE_TIME, LASTUP_TIME,B_MESSAGE,EVALUATION_STATUS,TRANSPORDCODE,ORDER_SOURCE) VALUES (?,?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x99\x8F\xF0\x9F...' for column 'B_MESSAGE' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\x9F\x99\x8F\xF0\x9F...' for column 'B_MESSAGE' at row 1
原因:
\xF0\x9F\x99\x8F\xF0\x9F是十六进制,数据库默认的字符集编码是utf8,无法识别十六进制的数据。
解决方法:
将数据库的字符集由utf8升级到utf8mb4。
升级方案:
-
修改数据库字符集character-set-server=utf8mb4 重启数据库生效。
-
修改database 的字符集为 utf8mb4 alter database dbname character set utf8mb4
-
修改表的字符集 为utf8mb4 , alter table character set = utf8mb4
ALTER TABLE bargain_msg_receive CONVERT TO CHARACTER SET utf8mb4;
http://vivisidea.iteye.com/blog/1395571
http://www.jianshu.com/p/20740071d854