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

标签 mysql unicode

我想在我的数据库中搜索字符 İ - “上面有点的拉丁文大写字母 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/

相关文章:

php - 使用php将Mysql数据保存在xls中

javascript - 为什么我的发帖请求处于待处理状态?

mysql - MariaDB 用户定义的函数在需要小数时返回 int 或 null

swift - 如何在 Swift 中从 parse.com 数据库中读取 unicode 字符?

zend-framework - 问号应该是 X

php - 为什么我用PDO插入非英文字符会变成怪物?

mysql 将字符串 'now()' 视为日期时间?

java - 在java中检索MySQL时间

python - 从 Python 代码将字符串插入 SQLite 数据库时出错

unicode - ghc 6.12.1、System.Environment.getArgs 和 UTF-8