我使用的是带有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.
在我的本地主机上,这似乎运行良好,我不知道为什么。
我该怎么解决这个问题?
loopback-connector-mysql
会将BINARY
添加到查询中
https://github.com/strongloop/loopback-connector-mysql/blob/c681b2dbe72b4cf9e75ccc7016f1fc2e8ef6cd1d/lib/mysql.js#L556
MySQL 8.0.22不允许CCD_;非二进制";类型(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,如果您以这种格式存储数据(。
我建议使用utf8,而不是utf32。
utf8和utf16以及utf32是不同的字符集。
很少有人使用utf16,基本上没有人使用utf32。
utf32为每个字符使用4个字节,因此在空间方面效率很低。
我认为(没有证据(8.0的Regexp处理器只处理utf8。
utf8_bin是几个";校勘";对于utf8";字符集";。