我想在我的数据库中搜索字符İ
- "拉丁大写字母 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;