近日在插入mysql数据时,报了一个错'\xF0\x9F\x8E\x80Sa...'的错误,导致数据插入不进去。一看字段名是存储微信昵称的字段,想到的可能是有什么表情符号插入不进去。
通常情况,Mysql中utf8占3个字节,但是,3个字节对于表情符号是不够的,需4个字节;此时使用utf8,保存表情符号会出现‘\xF0\x9F\x8D\x83\xF0\x9F’的问题。需要把数据库的字符集设置为utf8mb4编码。
但我确认了一下,数据库是设置的utf8mb4编码呀,还是插入失败。
(1).查看数据库编码,可以看到已经是utf8mb4
show variables like 'character_set_database';
(2).查看表的编码,可以看到也是utf8mb4
show create table user;
(3).查看字段的编码,可以看到还是utf8mb4
show full columns from user;
最后才发现,因为我是使用Navicat连接工具,直接写sql的方式插入的,而连接属性连接时的编码设置的是自动,导致插入不进去。
解决方式:把连接属性的编码设置成utf-8后,重新执行sql语句就可以正常插入了
总结:
遇到表情符号插入的首先要排查是否是字符集的问题,若字符集设置的正确再去找是否是连接工具是否设置正确。