Spec-Zone.ru › MySQL 5.7

10.13 Добавление набора символов

  • 10.13.1 Массивы определения символов
  • 10.13.2 Поддержка сортировки строк для сложных наборов символов
  • 10.13.3 Поддержка многобайтовых символов для сложных наборов символов

В этом разделе описывается процедура добавления набора символов в MySQL. Правильная процедура зависит от того, является ли набор символов простым или сложным:

  • Если набору символов не требуются специальные процедуры сортировки строк и поддержка многобайтовых символов, он является простым.

  • Если набору символов требуется любая из этих функций, он является сложным.

Например, greek и swe7 являются простыми наборами символов, а big5 и czech — сложными наборами символов.

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

  1. Добавьте элемент <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 (общее, без учёта регистра). Двоичная сортировка может быть сортировкой по умолчанию, но обычно они разные. Сортировка по умолчанию должна иметь флаг primary. Двоичная сортировка должна иметь флаг binary.

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

    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.13.1, «Массивы определения символов».

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

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

    • Создайте файл ctype-MYSET.c в каталоге strings. Посмотрите на один из существующих файлов ctype-*.c (например, ctype-big5.c), чтобы увидеть, что нужно определить. Массивы в вашем файле должны иметь имена, такие как ctype_MYSET, to_lower_MYSET и т. д. Они соответствуют массивам для простого набора символов. См. Раздел 10.13.1, «Массивы определения символов».

    • Для каждого элемента <collation>, перечисленного в элементе <charset> для набора символов в Index.xml, файл ctype-MYSET.c должен предоставить реализацию сортировки.

    • Если набор символов требует функций сортировки строк, см. Раздел 10.13.2, «Поддержка сортировки строк для сложных наборов символов».

    • Если набор символов требует поддержки многобайтовых символов, см. Раздел 10.13.3, «Поддержка многобайтовых символов для сложных наборов символов».

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

    1. Отредактируйте mysys/charset-def.c и «зарегистрируйте» сортировки для нового набора символов.

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

      #ifdef HAVE_CHARSET_MYSET
      extern 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. Переконфигурируйте, перекомпилируйте и протестируйте.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/adding-character-set.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API