Обновление сортировки столбцов с utf8_general_ci на utf8_bin нарушает индекс

Я заметил, что после обновления сопоставления столбцов с utf8_general_ci на utf8_bin следующий запрос:

SELECT *
FROM tbl_table
WHERE updated_column = 'some_value'

возвращает пустой набор результатов (который должен быть непустым). updated_column имеет неуникальный индекс.

Почему это происходит и как перестроить индекс, чтобы он соответствовал обновлению?

P.S. Установка MySql:

mysql.exe  Ver 15.1 Distrib 10.4.7-MariaDB, for Win64 (AMD64), source revision 9a78a283f4ee7e8ccc4afb1d8a24c662fa4c634b

person Denis Kulagin    schedule 10.04.2020    source источник
comment
Укажите конкретные строки, чтобы мы могли лучше ответить на ваш вопрос. Если данные конфиденциальны, создайте тестовый пример, демонстрирующий проблему.   -  person Rick James    schedule 20.04.2020


Ответы (1)


utf8_bin — это двоичная сортировка, которая сравнивает строки только по их значениям кодовой точки Unicode.

utf8_general_ci будет соответствовать также символам, которые канонически эквивалентны, но имеют другое значение кодовой точки. Кроме того, сравнения выполняются без учета регистра (ci).

Если вы updated_column содержит значение «Some_value», поиск «some_value» с использованием utf8_general_ci будет соответствовать, а использование utf8_bin не будет соответствовать.

person Georg Richter    schedule 11.04.2020
comment
Кажется, это не так. Таблица запрашивается точно совпадающим значением, и после перестроения индекса (удаление/создание) она работает нормально. - person Denis Kulagin; 14.04.2020