12.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>, что означает, что сортировка не учитывает регистр. Для более сложных правил сортировки (для комплексных наборов символов) см. обсуждение сортировки строк в разделе 12.13.2 «Поддержка сортировки строк для комплексных наборов символов».
© 2025 Oracle
Licensed under the GPLv2 License.