如何在MySQL查询的列别名中使用表情符号(或其他utf8mb4)字符?

How to use emojis (or other utf8mb4) characters in a column alias of a MySQL query?

提问人:2xaronl 提问时间:1/31/2023 最后编辑:user37832432xaronl 更新时间:2/1/2023 访问量:125

问:

我正在将 SuiteCRM 7 与 MySQL 8.0.31 数据库一起使用。我已经采取措施迁移MySQL数据库以接受utf8mb4字符,这在使用SuiteCRM Web前端或HeidiSQL在表数据中输入表情符号时效果很好。

我现在正在尝试创建一个在列别名中使用表情符号的报告。SuiteCRM 构造的查询如下所示:

SELECT count(*) c FROM (SELECT `cases`.id AS 'ID_😀0', `cases`.id AS 'cases_id' FROM `cases`  WHERE cases.deleted = 0 ) AS n;

MySQL服务器响应:

查询失败:SELECT .id AS 'ID_😀0', .id AS 'cases_id' FROM WHERE cases.deleted = 0 LIMIT 0,60:MySQL 错误 3854:无法转换字符串“ID_\xF0\x9F\x98...”从 UTF8MB4 到 UTF8MB3casescasescases

类似的查询(省略表情符号)工作正常:

SELECT count(*) c FROM (SELECT `cases`.id AS 'ID_test0', `cases`.id AS 'cases_id' FROM `cases`  WHERE cases.deleted = 0 ) AS n;
  • 是否可以在 MySQL 服务器(基于 AWS RDS)上更改设置以使此查询按原样工作?
  • 或者有没有办法重新格式化查询以使其正常工作?
  • 或者这是 MySQL 的缺点,表情符号或其他特定于 utf8mb4 的字符在列别名中不起作用?

谢谢!

我尝试配置MySQL以生成常规日志,但我没有看到任何有用的信息。我还查看了错误代码 3854,到目前为止没有发现任何有用的东西。我仔细检查了一下我是否可以成功地将表情符号输入到表格数据中。

MySQL 的UTF-8 UTF8MB4

评论


答:

0赞 Rick James 2/1/2023 #1

唉,我认为这是不可能的。声明了某些系统表(例如包含列名的表)(又名 'utf8mb3)。表情符号需要 utf8mb4。CHARACTER SET utf8

评论

0赞 2xaronl 2/3/2023
这对某些汉字来说不是有问题吗?我很惊讶地听到它可能不受支持。
0赞 Rick James 2/3/2023
@2xaronl - 是的,任何 4 字节的汉字都会出现同样的问题。大多数(不是全部)汉字在 UTF-8 中仅占用 3 个字节,因此与存储数据库、表、列等名称的 MySQL 系统表兼容。