出现这种错误的主要原因还是字符集编码问题,如果已经尝试过把数据库、表、字段的字符集都设置为utf8或utf8mb4后仍然无法解决该问题,试着执行SET NAMES utf8mb4命令将客户端的字符集编码也修改为utf8mb4,执行之后会发现能够成功向表中插入生僻字并在客户端正确显示出来。
SHOW VARIABLES LIKE '%char%' 命令对比前后编码情况
改变前:
改变后:
可以看到SET NAMES utf8mb4命令改变的是character_set_client、character_set_connection、character_set_results几个值,它们都是和 client 相关的参数。
SET NAMES utf8mb4命令只是临时改变mysql客户端字符集编码,在重启mysql服务后便会失效,如果想要永久生效,需要在my.cnf(Linux)或my.ini(Windows)配置文件中将client和server的默认字符集编码均修改为utf8mb4。
[client]
default_character_set=utf8mb4
[mysqld]
character_set_server = utf8mb4
utf8与utf8mb4的区别: