未加星标

Emoji 导致的bug

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二03 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏
起因

最近有部分用户反馈网页报错,看了下后台日志发现有如下记录

java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA4\x96' for column 'nickname' at row 1

网上搜了下说是 mysql 的 utf8 存储不了 Emoji 表情,突然明白了错误的原因

网页在完成微信授权登录后会把用户的信息存储到数据库,其中就包括昵称,openid,地理位置等信息。原因肯定就是用户昵称中含有 Emoji 表情了

解决

知道了原因,问题也就容易解决了。MySQL 的 utf8 是 3 个字节,使用 utf8mb4 就行了,Must Be 4 Byte。。。。

1. 修改 MySQL 默认字符集

防止以后再出问题,修改为默认字符集为utf8mb4

vi /etc/my.cnf # 配置完毕重启下 systemctl restart mysqld
Emoji 导致的bug

修改完毕后可以查询下,没有变化再 set 下

show variables like 'character%'; -- set character_set_client='utf8mb4'; -- set character_set_connection = 'utf8mb4'; -- set character_set_results = 'utf8mb4';
Emoji 导致的bug
2. 修改对应表的字段的类型

用 sql 修改或者用其他工具,这里直接使用 Navicate 在设计表里面直接修改修改字段的字符集

排序规则没什么要求,一般都是 utf8mb4_unicode_ci 和 utf8mb4_general_ci

ALTER TABLE bc_wx_user MODIFY nickname varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
Emoji 导致的bug
3. 修改 jdbc 连接的参数

添加 useUnicode 参数

jdbc:mysql://127.0.0.1:3306/bc?autoConnect=true&useUnicode=true&characterEncoding=UTF8&useSSL=false

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

代码区博客精选文章
分页:12
转载请注明
本文标题:Emoji 导致的bug
本站链接:https://www.codesec.net/view/626374.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(144)