技术饭

更改MySQL数据库的编码为utf8mb4,还是无法解决表情符号不能保存的问题

copylian    0 评论    16755 浏览    2020.12.26

更改MySQL数据库的编码为utf8mb4,还是无法解决表情符号不能保存的问题,这几天在做公众号授权,每次写入用户昵称数据的时候一直报错,我就奇怪了,明明数据库、字符集都改成了utf8mb4,为什么还是写入不了数据呢,查看了测试机(mysql5.7.24)的my.cnf 文件没有配置设置编码却没有问题,而正式机(mysql5.7.32)做了字符集编码的配置却出现了异常,真实奇葩~~~

表结构已经更改过:

1608962881(1).png

命令:show variables like 'char%';

命令:SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'

1608962799(1).png


数据库配置也已经更改过了,但是还是报错:

程序异常:[正式环境]{"msg":"PDO:SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\\xF0\\x9F\\x98\\x8B \\xF0...' for column 'nickname' at row 1","URL":"https:\/\/wechatapi.ponyfamily.cn\/wechat.php\/thirdplatform\/eventmsg\/appid\/wx0f8f9b8061bca518?signature=dd8a600b26326c4bf91ec9a46d6b6a137a0fe18e&timestamp=1608960413&nonce=877040232&openid=ogxwb1j7x_6jcV4NCQb4zjWAWSII&encrypt_type=aes&msg_signature=5331189bd6bae05d556eb3e6179cddc8057f8a7a"}

报错的意思是无法写入nickname表情符号。

解决方案:

修改MySQL配置文件

修改mysql配置文件my.cnf(windows为my.ini) 

my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容: 

[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'

1608963374(1).png

character-set-client-handshake = FALSE 这个设置比较关键。

参考:https://blog.csdn.net/u010637366/article/details/82702795

参考:http://www.zzvips.com/article/56978.html

参考:https://www.oschina.net/question/813429_2284931

参考:https://www.cnblogs.com/zengkefu/p/5652510.html

只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!

  • 还没有评论,沙发等你来抢