Заменить определенный символ поиска MySQL на utf8mb4_unicode_ci - PullRequest
0 голосов
/ 04 октября 2018

Я хочу найти в моей базе данных символ İ - «латинская заглавная буква 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 из строки?

1 Ответ

0 голосов
/ 07 октября 2018

Быстрое исправление может быть

UPDATE `benches`
    SET inscription = REPLACE(inscription, _utf8mb4'İ' COLLATE utf8mb4_bin, 'I')
    WHERE  INSTR(inscription, _utf8mb4'İ' COLLATE utf8mb4_bin) > 0

Лучшим исправлением может быть выполнение этого после подключения:

SET NAMES utf8mb4;

Если ни одна из этих работ не работает, предоставьте контрольный пример, который включаетсоздание и заполнение таблицы, а также UPDATE.Может потребоваться некоторое экспериментирование, чтобы вызвать другое потенциальное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...