10.13 Добавление набора символов
В этом разделе описывается процедура добавления набора символов в MySQL. Правильная процедура зависит от того, является ли набор символов простым или сложным:
Если набору символов не требуются специальные процедуры сортировки строк и поддержка многобайтовых символов, он является простым.
Если набору символов требуется любая из этих функций, он является сложным.
Например, greek и swe7 являются простыми наборами символов, а big5 и czech — сложными наборами символов.
Для использования следующих инструкций вам необходимо иметь дистрибутив MySQL. В инструкциях MYSET представляет имя набора символов, который вы хотите добавить.
-
Добавьте элемент
<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;
-
Этот шаг зависит от того, добавляете ли вы простой или сложный набор символов. Для простого набора символов требуется только файл конфигурации, а для сложного — файл исходного кода C, который определяет функции сортировки, функции многобайтовых символов или оба.
Для простого набора символов создайте файл конфигурации
, описывающий свойства набора символов. Создайте этот файл в каталогеMYSET.xmlsql/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.cstrings. Посмотрите на один из существующих файловctype-*.c(например,ctype-big5.c), чтобы увидеть, что нужно определить. Массивы в вашем файле должны иметь имена, такие какctype_,MYSETto_lower_и т. д. Они соответствуют массивам для простого набора символов. См. Раздел 10.13.1, «Массивы определения символов».MYSETДля каждого элемента
<collation>, перечисленного в элементе<charset>для набора символов вIndex.xml, файлctype-должен предоставить реализацию сортировки.MYSET.cЕсли набор символов требует функций сортировки строк, см. Раздел 10.13.2, «Поддержка сортировки строк для сложных наборов символов».
Если набор символов требует поддержки многобайтовых символов, см. Раздел 10.13.3, «Поддержка многобайтовых символов для сложных наборов символов».
-
Измените конфигурационную информацию. Используйте существующую конфигурационную информацию в качестве руководства по добавлению информации для
MYSYS. Приведенный здесь пример предполагает, что набор символов имеет сортировки по умолчанию и двоичную сортировку, но требуется больше строк, если уMYSETесть дополнительные сортировки.-
Отредактируйте
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_
MYSETadd_compiled_collation(&my_charset_MYSET_general_ci); add_compiled_collation(&my_charset_MYSET_bin); #endif Если набор символов использует
ctype-, отредактируйтеMYSET.cstrings/CMakeLists.txtи добавьтеctype-в определение переменнойMYSET.cSTRINGS_SOURCES.-
Отредактируйте
cmake/character_sets.cmake:Добавьте
MYSETв значение сCHARSETS_AVAILABLEв алфавитном порядке.Добавьте
MYSETв значениеCHARSETS_COMPLEXв алфавитном порядке. Это необходимо даже для простых наборов символов, иначе CMake не распознает-DDEFAULT_CHARSET=.MYSET
-
Переконфигурируйте, перекомпилируйте и протестируйте.
© 2025 Oracle
Licensed under the GPLv2 License.