首页 > 解决方案 > Loopback 4 + MySQL:字符集'utf32_bin'不能与'binary'一起使用来调用regexp_like

问题描述

我正在使用带有 mysql 8.0.22 的环回 4。当我想执行以下操作时:

let orders = await this.orderRepository.find({
    where: {events: {regexp: new RegExp(`.*"id":${event.id}.*`)}},
  });

我收到以下错误:

500 Error: UNKNOWN_CODE_PLEASE_REPORT: Character set 'utf32_bin' cannot be used in conjunction with 'binary' in call to regexp_like.

在我的本地主机上,这似乎工作正常,我不知道为什么。

我怎样才能解决这个问题?

标签: mysqlloopback4

解决方案


loopback-connector-mysqlBINARY如果您使用区分大小写的 RegExp,则添加到查询中:

https://github.com/strongloop/loopback-connector-mysql/blob/c681b2dbe72b4cf9e75ccc7016f1fc2e8ef6cd1d/lib/mysql.js#L556

MySQL 8.0.22 不允许REGEXP BINARY使用“非二进制”类型(CHAR、VARCHAR、TEXT 等)

是否为 UTF-8/16/32 无关紧要。


一个简单的解决方案可能是使用不区分大小写的 RegExp:

let orders = await this.orderRepository.find({
    where: {events: {regexp: new RegExp(`.*"id":${event.id}.*`, "i")}},
});

或者将字段更改为二进制类型。像 VARBINARY、BLOB 等(或 JSON,如果您以该格式存储数据)。


推荐阅读