Массивы определения символов
Простые массивы 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 .
1 2 3
8 8 8
|