Поисковые системы
Программы SEO
Оптимизация сайтов
Статьи по seo
Реклама в интернет
Интернет-маркетинг
Юзабилити
Яндекс
Google
Разработка сайта
Веб дизайн
HTML
HTML-редакторы
Programming
MySQL
Apache
XML/WML
SSI и CSS
Статьи по web
Хостинг

MySQL / Локализация MySQL и использование национальных алфавитов ( 3 часть )



Массивы определения символов

Простые массивы to_lower[] и to_upper[] содержат символы верхнего и нижнего регистров, соответствующие каждому из символов набора. Например:


to_lower["A"] should contain "a"
to_upper["a"] should contain "A"


sort_order[] - карта, устанавливающая правила упорядочивания символов для сравнения и сортировки. Во многих наборах символов эта таблица совпадает с to_upper[] (благодаря чему при сортировке регистр символов не учитывается). MySQL сортирует символы в соответствии со значением sort_order[символ]. Более сложные правила упорядочивания строк разъясняются ниже. Cм. раздел Поддержка упорядочивания строк.

ctype[] представляет собой массив битов, по одному элементу на каждый из символов. (Массивы to_lower[], to_upper[], и sort_order[] индексируются по значению символа, а ctype[] - по значению символа + 1. Это позволяет обрабатывать символы EOF).

В файле 'm_ctype.h" приведены следующие определения битовых масок:


#define _U 01 /* верхний регистр */
#define _L 02 /* нижний регистр */
#define _N 04 /* число (цифра) */
#define _S 010 /* символ пробела */
#define _P 020 /* знак пунктуации */
#define _C 040 /* управляющий символ */
#define _B 0100 /* пустой символ */
#define _X 0200 /* шестнадцатеричная цифра */


Значение ctype[] для каждого из символов должно представлять собой объединение значений битовых масок, описывающих символ. Например, "A" представят собой символ верхнего регистра (_U) а также шестнадцатеричную цифру (_X), поэтому элемент ["A"+1] должен содержать значение:


_U + _X = 01 + 0200 = 0201



Поддержка упорядочивания строк

Если правила сортировки вашего естественного языка слишком сложны и не могут быть заданы с помощью простой таблицы sort_order[], необходимо использовать функции упорядочивания строк.

В настоящее время лучшим справочным пособием по этому вопросу являются уже реализованные наборы символов. Примером такой реализации могут служить наборы big5, czech, gbk, sjis и tis160.

В начале файла в особом комментарии необходимо указать значение strxfrm_multiply_MYSET=N. Значение N представляет собой максимальный прирост объема строк во время my_strxfrm_MYSET (т.е. положительное целое число).

Поддержка многобайтовых символов

При желании обеспечить поддержку нового набора, содержащего многобайтовые символы, нужно пользоваться специальными функциями для работы с многобайтовыми символами.

В настоящее время лучшим справочным пособием по этому вопросу являются уже реализованные наборы символов. Примером такой реализации могут служить наборы euc_kr, gb2312, gbk, sjis и ujis. Они реализованы в файлах "ctype-"charset".c", расположенных в папке 'strings".

В начале файла в особом комментарии необходимо указать значение strxfrm_multiply_MYSET=N. Значение N должно содержать объем самого "большого" символа набора в байтах.

Проблемы с наборами символов

При попытке воспользоваться набором символов, не включенным в исполняемый файл, можно столкнуться со следующими неприятностями:


  • В программе задан неверный путь к каталогу, в котором хранятся наборы символов (по умолчанию это "/usr/local/mysql/share/mysql/charsets"). Данную проблему можно решить с помощью настройки --character-sets-dir.

  • Набор символов является многобайтовым и не может быть загружен динамически. В таком случае нужно перекомпилировать программу и включить в нее поддержку нужного набора.

  • Набор символов может быть загружен динамически, но конфигурационного файла для него нет. В таком случае нужно скопировать файл для этого набора из нового дистрибутива MySQL.

  • В файле "Index" нет имени набора символов.


    ERROR 1105: File "/usr/local/share/mysql/charsets/?.conf" not found (Errcode: 2)


    В таком случае нужно либо установить новый файл 'Index" или вручную внести в него недостающие имена наборов.


Узнать имя набора символов таблиц MyISAM можно с помощью команды myisamchk -dvv table_name.


seoweb.ru