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

MySql varchar length for emojis on Sequel Pro

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

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

for a (1 byte in utf8), it can store 50 maximum.

for (3 bytes in utf8, Chinese character love), it can store 50 maximum.

for </code> (4 bytes in utf8, hex <code>F09F9881), it can store 25 maximum.

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

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

感谢您的回复,我明白了。我在 MacOS X 上使用 Sequel Pro 1.1.2。当我在软件UI编辑table内容时,最多25个emoji并且吐司警告maximum text length is set to 50

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

所以这是一个 Sequel 专业版问题。我会在这个问题上添加 Sequel Pro 标签。希望这会帮助遇到同样问题的人。谢谢

不需要算术。

varchar(50)

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

调试您的情况,请提供:

SELECT VARIABLES LIKE 'char%';

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