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

时间:2018-10-04 20:46:08

标签: mysql unicode

我想在数据库中搜索字符for link in soup.find_all('a'): print(link.get('href')) -“拉丁大写字母i上面带点(U + 0130)”-并将其替换为常规İ(U + 0049)。

例如,我想将“SİNG”转换为“ SING”。

数据库排序规则是utf8mb4_unicode_ci。

我可以使用I

查找字符
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'

那么,我需要什么样的魔术调用来搜索和替换字符串中的特定Unicode字符?

1 个答案:

答案 0 :(得分:0)

快速修复方法可能是

Index

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

has_many :subscribed_posts, through: :boards, source: :posts, conditions: {["user_id != ?", id] }

如果以上两种方法都不起作用,请提供一个测试用例,其中包括创建和填充表以及UPDATE `benches` SET inscription = REPLACE(inscription, _utf8mb4'İ' COLLATE utf8mb4_bin, 'I') WHERE INSTR(inscription, _utf8mb4'İ' COLLATE utf8mb4_bin) > 0 。要想出另一个可能的解决方案,可能需要做一些实验。