MySQL и польские слова

Я заметил проблему с "неанглийскими" (польскими) символами при использовании MySQL.

запрос "выберите 'abcde'='ąbćdę'" возвращает "1" и строки не равны...

не могли бы вы помочь мне ? :) спасибо!!!


person Michal_R    schedule 17.08.2010    source источник


Ответы (2)


Для utf8_general_ci они равны (за исключением ł, который MySQL не считает ошибкой), а начиная с версии 5.6 вы также можете использовать utf8_unicode_520_ci, который правильно обрабатывает все польские символы. Используйте utf8_polish_ci, чтобы рассматривать символы с ударением и символы без ударения как разные.

select 'abcde'='ąbćdę' COLLATE utf8_polish_ci
>> 0

Демонстрация «не ошибка»

select 'abcde'='ąbćdę' COLLATE utf8_general_ci
>> 1

select 'abcdel'='ąbćdęł' COLLATE utf8_general_ci
>> 0

См. отчет об ошибке здесь: http://bugs.mysql.com/bug.php?id=9604

person Mchl    schedule 17.08.2010
comment
Стоит отметить, что в MySQL 5.6 вы можете использовать сопоставление utf8_unicode_520_ci, которое обрабатывает регистр ł так же, как utf8_general_ci делает с другими полированными символами. - person kars7e; 10.12.2014
comment
Спасибо @bigfun. Добавил эту информацию в ответ - person Mchl; 10.12.2014
comment
у меня похожая проблема с ş и s обрабатываются как идентичные значения. Я уже пробовал несколько разных сортировок, и ни одна из них не работает. Есть идеи? здесь мой вопрос - person oldboy; 09.11.2018
comment
Румыны и турки относятся к S по-разному. Польский обрабатывает og Вот таблица всех букв, букв с наиболее акцентированными буквами и всех сопоставлений utf8: mysql.rjweb. org/utf8_collations.html . Он показывает, какие сопоставления имеют разные буквы для огонеков и т. д. - person Rick James; 09.11.2018

Вы можете заменить Ł на L и ł на l в запросе MYSQL, например:

SELECT REPLACE(REPLACE('abcdel', 'Ł', 'L'), 'ł', 'l') = REPLACE(REPLACE('ąbćdęł', 'Ł', 'L'), 'ł', 'l') COLLATE utf8_general_ci
>> 1

и с этого момента все диакритические буквы равны их недиакритическим эквивалентам.

person Skamielina    schedule 23.09.2013