一个关于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符号。

查阅资料,官方解释:

2021/10/03更新

按照网上的教程或者个人习惯数据库安装完之后

my.ini(Windows)或my.cnf(linux)文件的两处都会是以下这样的

[mysql]

default-character-set=utf8

[mysqld]

character_set_server=utf8

那怎么解决呢?

方式一

找到这两处进行修改

[mysql]

default-character-set=utf8mb4

[mysqld]

character_set_server=utf8mb4

再重启数据库

方式二

1、SpringBoot项目

修改配置文件

application.yml

在spring.datasource后面再加上这一段

druid:
connection-init-sqls:
set names utf8mb4

2、SSM项目

修改配置文件

applicationContext.xml

一个关于MySQL指定编码实现的小坑

关键代码

这样才算完美解决

最后

Tips:如果有需要保存emoji符号的字段,记得一定要指定编码为 utf8mb4 。

Original: https://www.cnblogs.com/jae-tech/p/15406171.html
Author: Jae1995
Title: 一个关于MySQL指定编码实现的小坑

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622701/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Windows下安装MySQL

    Windows下安装MySQL 安装包下载 官网下载地址https://dev.mysql.com/downloads/mysql/ 点击下载之后会跳转界面 可以不选择注册或登录账…

    Java 2023年6月8日
    090
  • css height属性中的calc方法

    例如父盒子是100%的高度 盒子里面的head部分固定位140px 内容部分始终为剩余的全部高度 height: calc(100% – 140px); “…

    Java 2023年6月13日
    051
  • 物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合

    先看我们最后实现的一个效果 1.手机端向主题 topic111 发送消息,并接收。(手机测试工具名称:MQTT调试器) 2.控制台打印 MQTT基本简介 MQTT 是用于物联网 (…

    Java 2023年6月13日
    066
  • OAuth2授权服务器Id Server一键生成配置原理

    OAuth2客户端的配置参数非常多,虽然Id Server通过控制台可视化解决了创建 OAuth2客户端的问题。但是如何进一步降低 OAuth2的使用难度,把创建的 OAuth2客…

    Java 2023年6月8日
    082
  • Typora中Markdown学习

    可以自己设置标题级数,且各标题之间可在大纲处看到鲜明的层级关系,非常方便清楚。 “#”——一级标题 “##”——二级标题 &#822…

    Java 2023年6月5日
    0202
  • 【转载】Spring AMQP中文文档

    http://ju.outofmemory.cn/entry/320538 Original: https://www.cnblogs.com/yingsong/p/9789377…

    Java 2023年5月29日
    088
  • 确定稳定的 Spring Cloud 相关环境版本

    开发部署 Spring Cloud 微服务框架,需要先确定 Spring Cloud 的相关环境版本,主要包含:Spring Cloud、Spring Cloud Netflix、…

    Java 2023年5月30日
    066
  • HttpClient的 java.net.SocketException: Too many open files

    今天在维护一个老项目的时候发现,错误: 大致意思是,资源未释放。 代码用的是httpClient,在finally中也关比了资源 后来找度娘了解下: 所以,我的:postMetho…

    Java 2023年5月29日
    0168
  • 【leetcode】 15. 三数之和

    题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意…

    Java 2023年6月6日
    0109
  • 如何定义超大二维数组

    #include #include #include using namespace std; int main() { //定义超大二维数组方法一 int *p=new int[…

    Java 2023年6月7日
    080
  • 双亲委派机制

    双亲委派机制 原理 1、一个类加载器接收到类加载请求,它自己并不会先去加载,而是把这个请求委托给父类的加载器去执行 2、如果父类的加载器还有其父类加载器,则进一步向上委托,一次递归…

    Java 2023年6月14日
    073
  • [翻译]Selenium API 命令和操作(JAVA)

    [翻译]Selenium API 命令和操作(JAVA) https://www.cnblogs.com/fayez/p/11837550.html Original: https…

    Java 2023年5月29日
    095
  • elasticsearch快速安装启动

    准备 docker docker内安装centos容器,模拟服务器环境 centos容器安装 下载centos容器 docker pull centos 启动docker容器 do…

    Java 2023年6月8日
    071
  • Mybatis基础知识大全!!!

    1. 简介 1.1什么是Mybatis 1.2 如何获得Mybatis 1.3 使用Mybatis的好处: 2.初涉Mybatis 2.1环境搭建 2.2、创建一个模块(项目) 2…

    Java 2023年6月8日
    0111
  • 人生苦短,我用python之二

    今天的主题爬取网页的通用代码框架 我们首先打开IDLE选择File->new window命令(或者可以直接按键Ctrl+N键,在很多地方这个按键是新建文件的意思) 我们填入…

    Java 2023年6月7日
    0100
  • 隐身衣揭秘–java中继承/隐藏/覆写

    故事背景 看过《哈利·波特》的娃们,想必一定还记得电影中的”隐形斗篷”。。这件隐形衣是哈利收到的圣诞礼物,也是死亡圣器中的三件套之一,它让哈利小盆友在执行任…

    Java 2023年5月29日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球