utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,java程序中将报SQL异常:
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
解决方法:
将数据库表和某些字段的编码设置为utf8mb4,utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符
字符编码是utf8mb4,排序是utf8mb4-unicode-ci