mysql存储emoji表情

最近在做小程序,存储微信昵称的时候,遇到了这个问题

insert into user (id, parentId, phone, token,       nickname, avatarUrl,type, createtTime,       updateTime)     values (?, ?, ?, ?,       ?, ?, ?, ?,       ?)
### Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA4\x94' for column 'nickname' at row 1
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\xA4\x94' for column 'nickname' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA4\x94' for column 'nickname' at row 1] with root cause
java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA4\x94' for column 'nickname' at row 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)

这是由于该昵称是emoj表情引起的,emoji表情的编码是utf8mb4, mysql的默认编码是utf8,那么如何让mysql支持emoji表情呢?

第一步、修改mysql配置文件

(linux和mac下my.cnf    windows 下my.ini  mac下mysql安装路径/usr/local/mysql)

[client]
default-character-set = utf8mb4

[mysql]
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中使用mysqlclient操作,也可使用navicat等工具操作

ALTER DATABASE "你自己的数据库" CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; 

ALTER TABLE " 你自己的数据库表" CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 

alter table "你自己的数据库表" modify `NICKNAME` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '昵称';

 此处我只修改了user表,和nickname字段,其他表和字段未修改 (考虑到只有昵称会存在emoji)

第三步、重启mysql

./mysql.server restart

检查是否修改好

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'

character_set_client	utf8   
character_set_connection	utf8
character_set_database	utf8mb4
character_set_filesystem	binary
character_set_results	utf8
character_set_server	utf8mb4
character_set_system	utf8
character_sets_dir	/xindao/mysql/share/charsets/
collation_connection	utf8_general_ci
collation_database	utf8mb4_unicode_ci
collation_server	utf8mb4_unicode_ci

  character_set_client    utf8   (此处没有显示utf8mb4,不知道原因,但可以存储emoji了)
 

猜你喜欢

转载自blog.csdn.net/Lonely_Devil/article/details/81835633