MySql Sequel Pro 上表情符号的 varchar 长度
MySql varchar length for emojis on Sequel Pro
我在 Linux 上使用 MySql 版本 5.6.46。
我有一列 name varchar(50) COLLATE utf8mb4_bin
和 ENGINE=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.
我在 Linux 上使用 MySql 版本 5.6.46。
我有一列 name varchar(50) COLLATE utf8mb4_bin
和 ENGINE=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.