簡體   English   中英

環回 4 + MySQL:字符集 'utf32_bin' 不能與調用 regexp_like 的 'binary' 結合使用

[英]Loopback 4 + MySQL: Character set 'utf32_bin' cannot be used in conjunction with 'binary' in call to 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.

在我的本地主機上,這似乎工作正常,我不知道為什么。

我怎樣才能解決這個問題?

如果您使用區分大小寫的 RegExp, loopback-connector-mysql會將BINARY添加到查詢中:

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

MySQL 8.0.22 不允許在“非二進制”類型(CHAR、VARCHAR、TEXT 等)上使用REGEXP BINARY

如果是 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“字符集”的幾個“排序規則”之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM