Spec-Zone.ru › MySQL 8.4

12.13.1 Массивы определения символов

Каждый простой набор символов имеет файл конфигурации, расположенный в каталоге sql/share/charsets. Для набора символов с именем MYSYS файл называется MYSET.xml. Он использует элементы массива <map> для перечисления свойств набора символов. Внутри этих элементов находятся элементы <map>:

  • <ctype> определяет атрибуты для каждого символа.

  • <lower> и <upper> перечисляют символы в нижнем и верхнем регистре.

  • <unicode> сопоставляет 8-битные значения символов с значениями Unicode.

  • Элементы <collation> указывают порядок символов для сравнения и сортировки, по одному элементу на сортировку. Бинарные сортировки не нуждаются в элементе <map>, поскольку сами кодовые значения символов задают порядок.

Для комплексного набора символов, реализованного в файле ctype-MYSET.c в каталоге strings, существуют соответствующие массивы: ctype_MYSET[], to_lower_MYSET[] и так далее. Не все комплексные наборы символов имеют все массивы. См. также примеры в файлах ctype-*.c. Дополнительную информацию см. в файле CHARSET_INFO.txt в каталоге strings.

Большинство массивов индексируются по значению символа и содержат 256 элементов. Массив <ctype> индексируется по значению символа + 1 и содержит 257 элементов. Это соглашение по умолчанию для обработки EOF.

Элементы массива <ctype> представляют собой битовые значения. Каждый элемент описывает атрибуты одного символа в наборе символов. Каждый атрибут связан с маской битов, как определено в include/m_ctype.h:

#define _MY_U   01      /* Upper case */
#define _MY_L   02      /* Lower case */
#define _MY_NMR 04      /* Numeral (digit) */
#define _MY_SPC 010     /* Spacing character */
#define _MY_PNT 020     /* Punctuation */
#define _MY_CTR 040     /* Control character */
#define _MY_B   0100    /* Blank */
#define _MY_X   0200    /* heXadecimal digit */

Значение <ctype> для данного символа должно быть объединением применимых значений маски битов, описывающих символ. Например, 'A' является символом в верхнем регистре (_MY_U), а также шестнадцатеричной цифрой (_MY_X), поэтому его значение ctype должно быть определено следующим образом:

ctype['A'+1] = _MY_U | _MY_X = 01 | 0200 = 0201

Значения битовых масок в m_ctype.h — это восьмеричные значения, но элементы массива <ctype> в MYSET.xml должны быть записаны в шестнадцатеричном формате.

Массивы <lower> и <upper> содержат символы в нижнем и верхнем регистре, соответствующие каждому элементу набора символов. Например:

lower['A'] should contain 'a'
upper['a'] should contain 'A'

Каждый массив <collation> указывает, как символы должны упорядочиваться для целей сравнения и сортировки. MySQL сортирует символы на основе значений этой информации. В некоторых случаях это совпадает с массивом <upper>, что означает, что сортировка не учитывает регистр. Для более сложных правил сортировки (для комплексных наборов символов) см. обсуждение сортировки строк в разделе 12.13.2 «Поддержка сортировки строк для комплексных наборов символов».

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

Spec-Zone.ru

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