替换utf8mb4\u unicode\u ci上的特定字符mysql搜索

ego6inou  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(420)

我想在我的数据库中搜索这个角色 İ -“上面带点的拉丁文大写字母i(u+0130)”—替换为正则表达式 I (u+0049)。
例如,我想转换“si”̇从“唱”到“唱”。
数据库排序规则是utf8mb4\u unicode\u ci。
我可以用 COLLATE utf8mb4_bin ```
SELECT * FROM benches WHERE inscription LIKE '%İ%' COLLATE utf8mb4_bin

但我无法取代它。

UPDATE benches SET inscription = REPLACE(inscription, 'İ', 'I') WHERE INSTR(inscription, 'İ') > 0 COLLATE utf8mb4_bin

我得到了错误

1253 - COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'

这很奇怪,因为数据库和列 `utf8mb4_unicode_ci` 那么,我需要什么神奇的调用来搜索和替换字符串中的特定unicode字符呢?
inkz8wg9

inkz8wg91#

快速解决方法可能是

UPDATE `benches`
    SET inscription = REPLACE(inscription, _utf8mb4'İ' COLLATE utf8mb4_bin, 'I')
    WHERE  INSTR(inscription, _utf8mb4'İ' COLLATE utf8mb4_bin) > 0

更好的解决方法可能是在连接后执行此操作:

SET NAMES utf8mb4;

如果这两个都不起作用,请提供一个测试用例,包括创建和填充一个表,以及 UPDATE . 可能需要一些实验才能想出另一种可能的解决办法。

相关问题