10.13.1 Массивы определений символов
Каждый простой набор символов имеет файл конфигурации, расположенный в каталоге sql/share/charsets. Для набора символов с именем MYSYS файл имеет имя . Он использует элементы массива MYSET.xml<map> для перечисления свойств набора символов. Внутри этих элементов находятся элементы <map>:
<ctype>определяет атрибуты каждого символа.<lower>и<upper>перечисляют символы строчных и заглавных букв соответственно.<unicode>сопоставляет значения символов 8-битного представления с Unicode-значениями.Элементы
<collation>указывают порядок символов для сравнения и сортировки, по одному элементу на порядок сортировки. Для двоичных порядков сортировки не требуется элемент<map>, так как кодовые значения символов сами предоставляют порядок.
Для сложного набора символов, как реализованного в файле ctype- в каталоге MYSET.cstrings, существуют соответствующие массивы: 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.