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

xhv8bpkk  于 2023-02-03  发布在  Mysql
关注(0)|答案(1)|浏览(205)

我使用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服务器响应如下:
查询失败:从cases中选择cases. id作为"ID_0",cases. id作为"病例_id",删除的病例数= 0,限值0,60:😀MySQL错误3854:无法将字符串"ID_\xF0\x9F\x98 ..."从utf8mb4转换为utf8mb3 Cannot convert string 'ID_\xF0\x9F\x98...' from utf8mb4 to utf8mb3
一个类似的查询(省略了表情符号)效果很好:

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和emojis的缺点,或者其他utf8mb4特有的字符在列别名中不起作用?

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

0g0grzrc

0g0grzrc1#

唉,我认为这是不可能的。某些系统表(比如包含列名的表)被声明为CHARACTER SET utf8(aka 'utf8mb3)。Emojis需要utf8mb4。

相关问题