我想在我的数据库中搜索字符 İ
- “上面有点的拉丁文大写字母 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
。可能需要进行一些实验才能想出另一种可能的解决方案。
关于mysql - 替换 utf8mb4_unicode_ci 上的特定字符 MySQL 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52654907/