替换utf8mb4_unicode_ci上的特定字符 MySQL 搜索



我想在我的数据库中搜索字符İ- "拉丁大写字母 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。 可能需要一些实验才能想出另一个潜在的解决方案。

我已成功使用以下查询:

UPDATE `benches` 
SET inscription = REPLACE(inscription, 'İ', 'I') 
WHERE  inscription LIKE '%İ%' COLLATE utf8mb4_bin;

最新更新