RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : mysql koi8-r


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Basil A. Sidorov
To : Vladislav Vasiliev
Subj : mysql koi8-r

> Опять извиняюсь за тупость. Объясните пожалуйста более подробнее, что значит по таблице весов.
Когда выполняется алфавитно-цифровая сортировка, то нельзя просто сравнивать ASCII-коды.
Скажем Ее и Ёё с точки зрения русского языка эквивалентны. А коды у них существенно разные.
Точно так же символы рубля (?) и номера (?) эквивалентны $ и #.
Более того, в KOI8, например, русские буквы стоят вообще не по алфавиту.
Поэтому и существуют таблицы весовых коэффициентов (collate sequence). Скажем для кодовой страницы 866 в позициях 128 и 160 будет записано одно и тоже число - 128.
Поэтому, прежде чем сравнивать символьные строки их преобразуют по этой таблице. Тогда результат сравнения не зависит от кодировки. Только от языка.

Примечание.
Merlin'овский RexxUtil содержит две функции:
SysGetCollate()
SysNationalLanguageCompare()
К сожалению, обе работают неверно.

SysGetCollate возвращает таблицу из COUNTRY.SYS, а для русского она зашита неверно. Но это легко поправить любым двоичным редактором.

Почему неправильно работает SysNationalLanguageCompare() я так и не понял. Такое впечатление, что сравнение ведётся по весам из 850-й кодовой страницы.

Mon 03 Dec 2001 18:39 Mozilla/4.04 [ru] (OS/2; I)




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.