如何解决Sequel Pro 上表情符号的 MySql varchar 长度
我在 Linux 上使用 MySql 版本 5.6.46。
我有一个列 name varchar(50) COLLATE utf8mb4_bin
和 ENGINE=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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。