一个关于MySQL指定编码实现的小坑
写在前面
环境:MySQL5.7+,MySQL数据库字符编码实现为utf8,表也为utf8
场景:微信授权获取用户信息(包括昵称)并保存到数据库,有的用户成功了,少数用户却失败了
那么为什么会失败呢?
贴上报错日志
Incorrect string value: '\xF0\x9F\x98\x98\xF0\x9F...' for column 'nickname' at row 1
是因为失败的用户微信昵称中带有emoji符号导致的
剖析:
MySQL支持多种字符编码集,如UTF-8、GB2312、GBK等
可以通过 SHOW CHARSET 命令查看。

通常我们会建议使用 UTF-8 作为默认的字符编码方式。
从上图我们可以看到,MySQL数据库有两套 UTF-8 编码实现。
- utf8:utf8 编码只支持三个字节以内。在 utf8 编码中,中文是占了3个字节,其他的英文、数字、符号都是占1个字节。但是emoji符号占4个字节,一些比较复杂的文字、繁体字也是占4个字节。
- utf8mb4:UTF-8编码的完整实现。最多可支持4个字节,所以,可以用来存储emoji符号。
查阅资料,官方解释:

最后
Tips:如果有需要保存emoji符号的字段,记得一定要指定编码为 utf8mb4 。
一个关于MySQL指定编码实现的小坑的更多相关文章
- mysql指定编码集
DROP TABLE app_info CREATE TABLE `app_info` ( `app_id` ) NOT NULL COMMENT '应用ID', `) NOT NULL COMMEN ...
- MySql默认编码所造成的乱码麻烦1.222
1.前言 MySQL在安装时,最后的一步,会让你选择MySQL服务器及客户端.数据库.连接接口的默认编码.通常可选择 UTF8和GB2312. 但是,如果你选择了utf8的时候,恰好你要从另一个数据库 ...
- MYSQL创建数据库时候直接指定编码和排序规则
安装我 在网上搜索的结果执行 代码: sudo gedit /etc/mysql/my.cnf 设置了默认编码为 UTF8 代码: [client]port = 3306sock ...
- 从一个慢查询到MySQL字符集编码
从一个慢查询到MySQL字符集编码 目录 从一个慢查询到MySQL字符集编码 1. 问题起源 2. MySQL字符集和字符集排序规则 2.1 字符集相关概念 2.2 MySQL中的字符集和字符集排序规 ...
- mysql创建数据库指定编码uft8
mysql创建数据库指定编码uft8 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_gener ...
- mysql url 连接配置的一个小坑。 工作中不会遇到。 学习的时候会
<property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> & ...
- ssas 为绑定指定的大小太小,导致一个或多个列值被截断
错误信息:ssas 为绑定指定的大小太小,导致一个或多个列值被截断 如果更改了某个维度或是事实表的字段长度,在处理CUBE时提示此错误,我们要做以下更新: 1.刷新数据源视图. 2.打开多维数据集,查 ...
- MYSQL转换编码的解决方法
MYSQL转换编码的解决方法 一.在utf8的mysql下 得到中文‘游客’的gbk下的16进制编码 mysql> SELECT hex(CONVERT( '游客' USING gbk )); ...
- MySQL 字符编码问题详细解释
http://www.codesoil.net/tag/charset Character Set Problem in PHP + MySQL4.1+ 和许多人一样,我也是在转移blog时才发现这个 ...
随机推荐
- python matplotlib 绘图+显示数值
参考:https://www.jb51.net/article/152685.htm 用plt.text函数 import numpy as np import matplotlib.mlab as ...
- plsql中数据生成工具data generator的使用
使用数据库时,有时需要使用大量的数据,可以用PLSQL Developer提供的Data Generator工具, 这里记录一下工具的介绍及几个使用注意事项 1.工具介绍 功能入口位于 工具 菜单下, ...
- C++模板使用
C++模板 模板是一种对类型进行参数化的工具: 通常有两种形式:函数模板和类模板: 函数模板针对仅参数类型不同的函数: 例如:Max函数 :求两个数的最大值,我们需要对各种数据类型进行重载,如下 in ...
- 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出
1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) { if (success){ ...
- LeetCode通关:通过排序一次秒杀五道题,舒服!
刷题路线参考:https://github.com/chefyuan/algorithm-base 大家好,我是拿输出博客督促自己刷题的老三,前面学习了十大排序:万字长文|十大基本排序,一次搞定!,接 ...
- jQuery扩展方法 (插件机制)
jQuery.extend(object) 扩展jQuery对象本身. 用来在jQuery命名空间上增加新函数. 在jQuery命名空间上增加两个函数: <script> jQuery.e ...
- c# 递归树形菜单
首先创建模型类Menus public class Menus { //菜单Id public int Id { get; set; } //菜单名 public string MenuName { ...
- WinUI 3学习笔记(3)—— ComboBox & DropDownButton & SplitButton
本篇想介绍相对小众但颇具使用价值的控件SplitButton,提到SplitButton难免会拿来与ComboBox进行比较,同时在WinUI 3的控件库中,还有一个默默无闻的DropDownButt ...
- Lambda函数接口和方法构造器应用
函数式接口 什么是函数式接口? 在java中'有且仅有一个抽象方法的接口',就称为函数式接口. 可以通过Lambda表达式来创建该接口的对象.(若Lambda表达式抛出一个受检异常,那么该异常需要在目 ...
- 小Z的袜子 & 莫队
莫队学习 & 小Z的袜子 引入 莫队 由莫涛巨佬提出,是一种离线算法 运用广泛 可以解决广大的离线区间询问题 莫队的历史 早在mt巨佬提出莫队之前 类似莫队的算法和莫队的思想已在Codefor ...