我想在我的数据库中搜索字符İ-“上面带点的拉丁文大写字母I(U+0130)”-并将其替换为常规的I(U+0049)。
例如,我想把“SİNG”转换成“SING”。
数据库排序规则是utf8mb4_unicode_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字符?

最佳答案

快速的解决方法可能是

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

一个更好的解决方案可能是在连接后执行此操作:
SET NAMES utf8mb4;

如果两者都不起作用,请提供一个测试用例,其中包括创建和填充一个表,以及UPDATE。要想出另一个可能的解决方案,可能需要一些实验。

07-28 10:15