Sequel Pro 上表情符号的 MySql varchar 长度

问题描述

我在 Linux 上使用 MySql 版本 5.6.46。 我有一个列 name varchar(50) COLLATE utf8mb4_binENGINE=InnoDB DEFAULT CHARSET=utf8mb4

当我尝试向表中插入一些数据时。我发现,

对于 a(utf8 中的 1 个字节),最多可以存储 50 个。

对于(utf8中的3个字节,汉字爱),最多可以存储50个。

对于 ?(utf8 中的 4 个字节,十六进制 F09F9881),它最多可以存储 25 个。

这让我很困惑。为什么 Mysql 不将一个表情符号视为一个字符?如果 Mysql 执行字节计数限制并且不正确地使用每个字符 3 个字节,我希望它可以存储 50*3/4=37。 Mysql到底是怎么做限制的?

----------更新-------------

多亏了你的回复,我明白了。我在 MacOS X 上使用 Sequel Pro 1.1.2。当我在软件的 UI 中编辑表格内容时,最大为 25 个表情符号并且它吐司警告 maximum text length is set to 50

然后我在服务器 set name = X'F09F9881...F09F9881' 上尝试了原始十六进制方法,它可以完美地容纳 50 个表情符号。

所以这是一个 Sequel Pro 问题。我将为这个问题添加 Sequel Pro 标签。希望这会帮助遇到同样问题的人。谢谢??

解决方法

不需要算术。

varchar(50)

可容纳任何类型的 50 个字符。这将占用最多 202 字节(4 * 50 + 2 用于隐藏长度字段)。

要调试您的情况,请提供:

SELECT VARIABLES LIKE 'char%';

SELECT col,HEX(col) FROM ...  -- to show what was stored.

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...