Spec-Zone.ru › MySQL 8.4

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

  • 12.13.1 Массивы определений символов
  • 12.13.2 Поддержка сортировки строк для сложных наборов символов
  • 12.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 слов. См. раздел 12.13.1, «Массивы определений символов».

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

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

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

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

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

    • Если набор символов требует поддержки многобайтовых символов, см. раздел 12.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-8.4-en/adding-character-set.html

Spec-Zone.ru

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