Spec-Zone.ru › MySQL 5.7

10.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>, что означает, что сортировка не учитывает регистр. Для более сложных правил сортировки (для сложных наборов символов) см. обсуждение сортировки строк в разделе 10.13.2, «Поддержка сортировки строк для сложных наборов символов».

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

Spec-Zone.ru

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