1 字节的 utf-8 序列的字节 1 无效_UTF8:一些好像没什么用的冷知识

本文讲述了MySQL中utf8和utf8mb4字符集的区别,utf8实际上是一个不完全的utf8实现,不支持补充字符集。utf8mb4支持完整的Unicode,包括emoji。在遇到插入emoji时遇到问题,应检查数据库配置是否使用了utf8mb4。此外,文章还探讨了Unicode、ASCII等字符集和编码规范。
摘要由CSDN通过智能技术生成

本文一共 3023 字,阅读时间自己算。

在乔纳森·斯威夫特的著名讽刺小说《格列夫游记》中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破。

然后忘了这个故事,咱们开始吧。

==  坑 ==

Charles同学这周又踩了个坑,数据插入MySQL时报错:

1366 Incorrect string value: '\xF0\x90\x8D\x83...' for column 'content' at row 1

按惯例搜一下,据说是因为mysql用的 utf8 不支持 emoji,需要修改配置文件,将字符集改成 utf8mb4:

[mysqld]

character-set-server = utf8mb4

stackoverflow.com/questions/10957238

但是 Charles 已经加上了这个配置,仍然报错。

ef124c5bf343e5b46c0ecc581ee41020.png

实际上,MySQL 还有另外一个配置,用于指定客户端和服务器之间连接时使用的字符集:

[mysqld]character-set-client-handshake = utf8mb4

当然,也可以在MySQL Client中指定,具体需要参考client的文档,或者简单粗暴地在连接成功以后执行(但不推荐):

SET NAMES utf8mb4;

== utf8 和 utf8mb4 ==

那么,什么是utf8mb4?和utf8有啥区别呢?

根据MySQL的manual:

The utfmb4 character set has these characteristics: 

- Supports BMP and supplementary characters.

- Requires a maximum of four bytes per multibyte character.

https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html

(文档中utf8mb4打错了&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值