Эти два запроса дают мне тот же самый результат:
select * from topics where name='Harligt';
select * from topics where name='Härligt';
Как это возможно? Кажется, что mysql переводит åäö в aao, когда он ищет. Там некоторый путь состоит в том, чтобы выключить это?
Я использую utf-8, кодирующий везде насколько я знаю. Та же проблема происходит и от терминала и от php.
Да, это стандартное поведение в сопоставлениях Unicode, не зависящих от языка.
9.1.13.1. Наборы символов Unicode
Для дополнительной иллюстрации, следующие равенства выполняются как в utf8_general_ci, так и в utf8_unicode_ci (о влиянии этого на сравнения или при выполнении поиска см. Раздел 9.1.7.7, «Примеры эффекта сопоставления»):
Ä = A Ö = O Ü = U
См. Также Примеры эффекта сопоставления
Вам нужно либо
использовать сопоставление, которое не ' У t есть эта «особенность» (а именно utf8_bin
, но это имеет другие последствия)
использовать другое сопоставление только для запроса . Это должно работать:
выберите * из тем, где name = 'Harligt' COLLATE utf8_bin;
становится сложнее, если вы хотите сделать регистронезависимый LIKE
, но не имеют преобразование Ä = A
умляут.Я не знаю параметров сортировки mySQL, которые нечувствительны к регистру и не выполняют такого рода неявное преобразование умляута. Если кто-нибудь знает, мне было бы интересно узнать об этом.
Связано:
вы хотите проверить настройки collation, collation - это свойство, которое устанавливает, какие символы идентичны.
эти 2 страницы должны помочь вам
Поскольку вы находитесь в Швеции, я бы рекомендовал использовать шведскую сортировку. Вот пример, показывающий разницу:
CREATE TABLE topics (name varchar(100) not null) CHARACTER SET utf8;
INSERT topics (name) VALUES ('Härligt');
select * from topics where name='Harligt';
'Härligt'
select * from topics where name='Härligt';
'Härligt'
ALTER TABLE topics MODIFY name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_swedish_ci;
select * from topics where name='Harligt';
<no results>
select * from topics where name='Härligt';
'Härligt'
Обратите внимание, что в этом примере я изменил только один столбец на шведскую сортировку, но вам, вероятно, следует сделать это для всей вашей базы данных, всех таблиц, всех столбцов varchar.