MySql支持Emoji表情

mysql版本需要5.5.3以上

原理分析:

UTF-8编码有可能是2、3、4个字节,而Mysql的utf8编码最多3个字节。Emoji表情是4个字节,进而出现问题。

后台报错:

Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column 'review' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)

解决方法:

1、修改mysql配置文件my.cnf,重启

[client]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[mysql]
default-character-set=utf8mb4

2、修改需要添加库、表、字段的字符集

修改数据库字符集: ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改表的字符集: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改字段的字符集: ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 如果只是某个字段需要 只需要修改那个字段的字符集就可以了

 

导入与导出

最好使用自带工具,导出时指定编码,否则导入时乱码

mysqldump –default-character-set-utf8mb4 –u 用户名 –p 数据库名 > 导出该文件的物理路径

 

附:RDS MySQL使用utf8mb4字符集存储emoji表情

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注