[sisyphus] странное и некрасивое поведение utf8 в паре rails/mysql

Anton V. Boyarshinov boyarsh на altlinux.org
Чт Июн 25 10:57:16 MSD 2009


On Wed, 24 Jun 2009 20:31:40 +0400 Michael Bykov wrote:

> странное и некрасивое поведение utf8 в паре rails/mysql
> Вторая строка - корректный результат, первая загадочна:
> 
> первая буква слова в поле wo_stress, по которому я ищу, ἰ = 0xF130, а
> в значении, которое mysql нашёл, ἱ = 0x1F31. То есть это разные
> строки!

Конкретно про MySQL не скажу, но про unicode вообще.. Ситуация на
первый взгляд, конечно, странная, но по своему корректная.. Дело в том,
что unicode это не кодировка в обычном смысле, а довольно сложная штука
(даже без учёта конечного автомата utf8). Многие символы можно записать
в unicode разными способами, и в ряде случаев они при этом должны
трактоваться как одинаковые.

Так, например, русская буква 'й' может быть записана двумя
равнозначными способами: как один глиф 'й' и как (два глифа) 'и' с
надстрочным символом (MacOS X использует второй способ, что порождает
порядочную кашу при переносе по крайней мере файлов, содержащих 'й' в
имени). Аналогично ё. Насчёт вашего примера в корректности работы
поиска не уверен, но вероятность того что в данному случае правильное
unicode сравнение должно работать именно так, оцениваю как высокое. При
unicode сравнении сравниваются не байты.

Антон


Подробная информация о списке рассылки Sisyphus