Spec-Zone .ru
спецификации, руководства, описания, API

10.3. Добавление Набора символов

10.3.1. Символьные Массивы Определения
10.3.2. Строковая Поддержка Сопоставления Сложных Наборов символов
10.3.3. Многобайтовая Символьная Поддержка Сложных Наборов символов

Этот раздел обсуждает процедуру для того, чтобы добавить набор символов к MySQL. Надлежащая процедура зависит от того, прост ли набор символов или сложен:

Например, greek и swe7 простые наборы символов, тогда как big5 и czech сложные наборы символов.

Чтобы использовать следующие инструкции, у Вас должно быть исходное распределение MySQL. В инструкциях, MYSET представляет имя набора символов, который Вы хотите добавить.

  1. Добавьте a <charset> элемент для MYSET к sql/share/charsets/Index.xml файл. Используйте существующее содержание в файле как руководство по добавлению нового содержания. Частичное перечисление для latin1 <charset> элемент следует:

    <charset name="latin1">  <family>Western</family>  <description>cp1252 West European</description>  ...  <collation name="latin1_swedish_ci" id="8" order="Finnish, Swedish">    <flag>primary</flag>    <flag>compiled</flag>  </collation>  <collation name="latin1_danish_ci" id="15" order="Danish"/>  ...  <collation name="latin1_bin" id="47" order="Binary">    <flag>binary</flag>    <flag>compiled</flag>  </collation>  ...</charset>

    <charset> элемент должен перечислить все сопоставления для набора символов. Они должны включать, по крайней мере, двоичное сопоставление и значение по умолчанию (основное) сопоставление. Сопоставление значения по умолчанию часто называют, используя суффикс general_ci (общий, нечувствительный к регистру). Для двоичного сопоставления возможно быть сопоставлением значения по умолчанию, но обычно они отличаются. У сопоставления значения по умолчанию должен быть a primary флаг. У двоичного сопоставления должен быть a binary флаг.

    Следует присвоить уникальный Идентификационный номер каждому сопоставлению. Диапазон ID с 1024 до 2047 резервируется для определяемых пользователем сопоставлений. Чтобы найти максимум в настоящий момент используемых ID сопоставления, используйте этот запрос:

    SELECT MAX(ID) FROM INFORMATION_SCHEMA.COLLATIONS;
  2. Этот шаг зависит от того, добавляете ли Вы простой или сложный набор символов. Простой набор символов требует только конфигурационного файла, тогда как сложный набор символов требует исходного файла C, который определяет функции сопоставления, многобайтовые функции, или обоих.

    Для простого набора символов создайте конфигурационный файл, MYSET.xml, это описывает свойства набора символов. Создайте этот файл в sql/share/charsets каталог. Можно использовать копию latin1.xml как основание для этого файла. Синтаксис для файла очень прост:

    • Комментарии пишутся как обычные XML-комментарии ( <!-- text -->).

    • Слова в пределах <map> элементы массива разделяются произвольным количеством пробела.

    • Каждое слово в пределах <map> элементы массива должны быть числом в шестнадцатеричном формате.

    • <map> элемент массива для <ctype> у элемента есть 257 слов. Другой <map> элементы массива после того, как у этого есть 256 слов. См. Раздел 10.3.1, "Символьные Массивы Определения".

    • Для каждого сопоставления, перечисленного в <charset> элемент для набора символов в Index.xml, MYSET.xml должен содержать a <collation> элемент, который определяет символьное упорядочивание.

    Для сложного набора символов создайте исходный файл C, который описывает свойства набора символов и определяет подпрограммы поддержки, необходимые, чтобы должным образом выполнить операции на наборе символов:

  3. Измените конфигурационную информацию. Используйте существующую конфигурационную информацию в качестве руководства по добавляющей информации для MYSYS. Пример здесь предполагает, что у набора символов есть значение по умолчанию и двоичные сопоставления, но больше строк необходимо если MYSET имеет дополнительные сопоставления.

    1. Редактирование mysys/charset-def.c, и "зарегистрируйте" сопоставления для нового набора символов.

      Добавьте эти строки к разделу "объявления":

      #ifdef HAVE_CHARSET_MYSETextern CHARSET_INFO my_charset_MYSET_general_ci;extern CHARSET_INFO my_charset_MYSET_bin;#endif

      Добавьте эти строки к "регистрационному" разделу:

      #ifdef HAVE_CHARSET_MYSET  add_compiled_collation(&my_charset_MYSET_general_ci);  add_compiled_collation(&my_charset_MYSET_bin);#endif
    2. Если набор символов использует ctype-MYSET.c, редактирование strings/CMakeLists.txt и добавьте ctype-MYSET.c к определению STRINGS_SOURCES переменная.

    3. Редактирование cmake/character_sets.cmake:

      1. Добавить MYSET к значению с CHARSETS_AVAILABLE в алфавитном порядке.

      2. Добавить MYSET к значению CHARSETS_COMPLEX в алфавитном порядке. Это необходимо даже для простых наборов символов, или CMake не будет распознавать -DDEFAULT_CHARSET=MYSET.

  4. Реконфигурируйте, перекомпилируйте, и тест.