You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize where条件包含emoji时查询返回错误记录的问题

问题根因

绝大多数情况都是reaction字段的排序规则(collation)配置问题:

  • 你大概率给字段用了utf8mb4_general_ci这类通用排序规则,这类规则为了提升排序效率,会给很多字形相近的Unicode字符(包括这几个圆形彩色emoji)设置相同的权重值,比较时会被判定为相等。匹配时就会返回满足其他条件的第一条记录,也就是你存储的第一条🟡的记录。
  • 小概率是数据库连接层没有显式指定utf8mb4编码,导致传入的emoji被转义为相同的占位符,不过从你生成的SQL语句里已经正常带了对应emoji来看,这个可能性很低。

排查步骤

  1. 确认字段排序规则
    直接执行SQL查看reaction字段的配置:
SHOW FULL COLUMNS FROM Roles WHERE Field = 'reaction';

如果返回结果的Collation列显示为utf8mb4_general_ci/utf8mb4_unicode_ci这类非二进制排序规则,即可确认问题。

  1. 验证匹配逻辑
    手动在数据库执行你生成的查询🔵的SQL,看返回结果:
SELECT * FROM `Roles` 
WHERE `Roles`.`guildId` = '844213646163050496' 
AND `Roles`.`messageId` = '855360336462217246' 
AND `Roles`.`type` = 'REACTION' 
AND `Roles`.`reaction` = '🔵';

如果返回了全部4条不同emoji的记录,就完全确认是排序规则导致所有emoji被判定为相等。

修复方案

将reaction字段的排序规则修改为二进制排序规则utf8mb4_bin即可,修改时注意保持你原字段的长度、非空等属性和原来一致,示例SQL:

ALTER TABLE Roles 
MODIFY COLUMN reaction VARCHAR(255) 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_bin NOT NULL;

修改完成后再执行查询就可以精确匹配不同的emoji了。

内容的提问来源于stack exchange,提问作者Feralheart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 10:36:07