相关文章推荐
捣蛋的松球  ·  MySQL 笔记 —— ...·  5 月前    · 
烦恼的哑铃  ·  C# ...·  1 年前    · 
慷慨的蜡烛  ·  面试官:order by ...·  1 年前    · 

不知道为什么深秋的到来,让人变的有些许抑郁和不安

这篇应该算个小知识吧。平时习惯在写文章的时候都喜欢用 windows emoji 表情(win+.)即可弹出,就如👨‍💻🏂🛌🛀🤽‍♂️⛹️‍♂️🤸‍♂️,还有、🏎🚠🛫💺🚀🛰⛵,这种🍟🍔🍿🌭🥞🥙🍰🥤🍸

之前开发的项目,没有存储过这种小表情,都是使用mysql的默认字符设置UTF-8,但是今天测试发现是行不通,然后就有了这篇小文章,希望能够让你有所收获。

📚一、UTF-8 为什么不支持Emoji表情

在一个utf-8表中所做测试,不支持插入数据中包含emoji表情的数据。

原因:MySQL数据库的 “utf8”并不是真正概念里的 UTF-8。目前可见字符集都只需要3个字节,包含了所有字符。但是问题出在unicode6系列编码上,它们需要4个字节,这部分就是有名的emoji。所以,如果我们的数据库使用默认字符设置,是无法存储emoji表情的。

📑二、UTF-8 与 UTF-8MB4 的区别

2.1、UTF-8 (Unicode)

我们先谈谈UTF-8,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。现代操作系统和大多数编程语言都直接支持Unicode。

所以在UTF-8编码中,一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间。

目前基本上可见字符集都只需要三个字节,包含了所有字符,但是目前问题出在了unicode6系列编码上,它们需要4个字节,这部分就是有名的emoji。所以,你只要不是特种编码还是unicode,且不存emoji,保证不出问题。

另外在此处,我有一点需要补充的是:

MySQL数据库的 “utf8”并不是真正概念里的 UTF-8,原因上面是一点,还有一点是MySQL中的“utf8”编码只支持最大3字节每字符。真正的大家正在使用的UTF-8编码是应该能支持4字节每个字符。

但其实MYSQL的开发者,并没有修饰这个bug,而是推出了新的字符集,就是UTF-8MB4字符编码。如👇

2.2、UTF-8MB4

UTF8MB4:MySQL在5.5.3之后增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。因此可以用来存储emoji表情。

从8.0后,MySQL也将会在某个版本中开始使用UTF-8MB4作为默认的字符编码。

所以简单说即是: UTF-8MB4才是MySQL中真正的UTF-8编码

那么如何让MySQL存储Emoji表情勒。

📰三、如何让MySQL存储Emoji表情

我们在创建数据库的时候,就需要选定utf-8mb4字符集,而不是utf-8。

我们在设置字段字符集的时候,也需要设置为utf-8mb4字符集。

这样我在Navicat 中测试是可以的。

但是,我之前在网上查询相关资料的时候,说是需要修改一下 my.ini 配置文件,

[mysqld] 下面添加: character_set_server=utf8mb4 ,保存,重启mysql,应该就可以解决了。

⌛四、自言自语

注意 下次再有人问起设置什么样的编码,记得直接推荐设置utf-8mb4哦,这个才是MySQL真正的UTF-8编码哦。

开始想11月更文写什么,掘金大佬们,你说我现在开始学前端还有救吗。

大家也可以说说想看什么,我会就写写会,不会就去学学,给大家推推文。👨‍💻

咱们后端这阶段真的是处于一个 是人是鬼都在卷的时期,困难重重啊

大家好,我是博主 宁在春 主页

一名喜欢文艺却踏上编程这条道路的小青年。

希望: 我们,待别日相见时,都已有所成

Mysql中“utf-8”和"utf8mb4"的区别与使用场景

补充: CSDN终于开始规范标题了,虽路遥且阻,我想这也是一个转变吧,希望一切会有所变化吧

不知道为什么深秋的到来,让人变的有些许抑郁和不安????前言这篇应该算个小知识吧。平时习惯在写文章的时候都喜欢用 windows的emoji表情(win+.)即可弹出,就如????‍????????????????????‍♂️⛹️‍♂️????‍♂️,还有、????????????????????????⛵,这种????????????????????????????????????之前开发的项目,没有存储过这种小表情,都是使用mysql的默认字符设置UTF-8,但是今天测试发现是行不通,然后就有了
本文实例分析了 mysql 存储 emoji 表情 报错的处理方法。分享给大家供大家参考,具体如下: utf-8 编码 可能2个字节、3个字节、4个字节的 字符 ,但是 MySQL 的utf8 编码 只支持3字节的数据,而移动端的 表情 数据是4个字节的 字符 。如果直接往采用 utf-8 编码 数据库 中插入 表情 数据,Java程序中将报SQL异常: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1 at com. mysql .jdbc.SQLError.createSQLException(SQL
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for colum n ‘name’ at row 1 at com. mysql .jdbc.SQLError.createSQLException(SQLError.java:1073) at com. mysql .jdbc. Mysql IO.checkErrorP
找到/etc/ mysql 路径下的my.cnf文件,通过vi命令打开该文件并进行编辑,需添加如下所示配置: [client] default-character-set=utf8 mb4 [ mysql d] character-set-client-handshake = FALSE character-set-server = utf8 mb4 collation-server = utf8 mb4 _unicode_ci init_connect=’SET NAMES utf8 mb4
mysql 存储 表情 报错: o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1366, SQLState: 22001 o.h.engine.jdbc.spi.SqlExceptionHelper   : Data truncation: Incorrect string value: '\xF0\x9F\x92\xA4' for co...
现在移动开发很火爆,已经远远超过了pc端。 在移动设备经常会发生用户发送的内容中包含 emoji 表情 ,在显示时就是乱码。 一般是因为 Mysql 表设计时,都是用UTF8 字符 集的。把带有 emoji 的昵称字段往里面insert一下就没了,整个字段变成了空 字符 串。这是因为 Mysql 的utf8 字符 集是3字节的,而 emoji 是4字节,这样整个昵称就无法 存储 了。 现在介绍在PHP开发中涉及到emo
一般我们数据 编码 格式默认设置为 utf-8 , 但是 utf-8 并不支持 表情 ,而 表情 需要utf8 mb4 字段(向下兼容 utf-8 ) 1 : 在终端或者SSH shell登录服务器, 2 : 修改 my.cnf (linux)或者 mysql .ini (win) vim /etc/my.cnf 添加或者修改以下内容: [client] default-character-set = utf8...
之前开发时需要在 数据库 保存 emoji 表情 符号,在 数据库 将表的 字符 集设置为utf8 mb4 ,仍然无法保存 表情 ,提示下面的报错 :java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94'。 最后发现是 数据库 连接的问题,本想在 数据库 链接参数中添加characterEncoding=utf8 mb4 ,但是并不生效。最后是在每次执行保存 emoji 表情 的语句之前,执行SET NAMES utf8 mb4 。后面又发现可以在建立 数据库 链接的初始化
其实很简单,百度了好多,也绕了很多弯路;还是做个记录方便以后用吧! 目的是为了往 数据库 表情 ,但是出错,原因是 UTF-8 编码 有可能是两个、三个、四个字节。 Emoji 表情 或者某些特殊 字符 是4个字节,而 Mysql 的utf8 编码 最多3个字节,所以数据插不进去。 工具: mysql 8.0(版本要大于5.5.3才能存 表情 );navicat; 服务端语言:typeorm; 简单来说分两步:(utf8 =>utf8 mb4 ) 一、(后端语言修改) 在ormconfig.json文件里添加 “charset”: “utf
MySQL 怎么 存储 表情 公司APP内嵌了一个IM的聊天系统,一月收费两千,领导很肉疼,某天下定决定自己做个即时通讯系统,基于快速上线的原则,得出结论是只要能发文字跟图片就行,其他都不要, 表情 都去掉,不过基于怕什么来什么的原则,开发过程中同事发现手机输入法自带 表情 ,所以 数据库 对于 表情 存储 还得支持,百度出来的解决方案发现都不完整,so,做以下总结: 1、 数据库 、数据表、字段的 字符 集都需要改成utf8 mb4 ,缺一不可,如下图: 数据库 截图 数据表截图 到这里我们的 数据库 设置已经完成了,剩下的就是代码方面的设