Java emoji Incorrect string value

某天项目上线后不久,客服找到了我,说有用户发表评论一直发布不成功,上到服务器后看到以下的日志:

16:22:39,757  INFO []-SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [....]; Data truncation: Incorrect string value: '\xF0\x9F\x90\xB1' for column 'content' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0\x9F\x90\xB1' for column 'content' at row 1

这个日志以前也遇到过,是储存emoji表情不成功报的错.mysql的utf8字符集最多是3个字节,但是emoji表情却有4个字节,不够用,我们可以用支持4个字节的utf8mb4字符集来存储这些表情.
那么怎么设置utf8mb4呢?

  1. 用select version();来检查mysql数据库的版本,只有5.5.3以后的mysql才支持utf8mb4字符集.
  2. 用show create table tableName 来查看表的字符集(CHARACTER),然后用
    ALTER TABLE tableName DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    来设置.
  3. 还是用show create table tableName 来查看字段的字符集(CHARACTER),然后用
    ALTER TABLE tableName CHANGE columnName VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    来设置字段的字符集
  4. 查看jdbc链接,去掉&characterEncoding=utf8,看看有没有效果
  5. 查看 mysql-connector-java 这个包的版本,需要升级到5.1.13
  6. 查看 数据源(cp30或dbcp)是否加了

一般都会解决问题`

你可能感兴趣的:(Java emoji Incorrect string value)