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了)

 

 

 

最后 由于春运快到了,给大家安利一个抢火车票的小程序心到抢票,微信扫码关注点击立即抢票即可

个人亲测效率很高,大家也可以加他们官方微信  xdticket  咨询。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值