| |
По умолчанию MySQL использует набор символов ISO-8859-1 (Latin1) с сортировкой согласно шведскому и финскому языкам. Это набор символов, подходящий в США и Западной Европе.
Все стандартные программы MySQL компилируются с поддержкой
--with-extra-charsets=complex
. Это добавляет код ко всем
стандартным программам, чтобы они были способны обработать
latin1
и все многобайтные наборы символов. Другие наборы
символов будут загружены из файла определения набора символов тогда, когда
это будет необходимо.
Набор символов определяет то, какие символы позволяются в именах, и в
каком порядке сортируются инструкции ORDER BY
и
GROUP BY
в операторе выполнения запроса SELECT
.
Вы можете менять набор символов опцией
--default-character-set
при запуске сервера. Наборы символов
доступны в зависимости от опций --with-charset=charset
и
--with-extra-charset=list-of-charset|complex|all
в файле
configure
и файлах конфигурации набора символов, перечисленных в
SHAREDIR/charsets/Index. Подробности в разделе
"2.3.3 Типичные опции configure
".
Если Вы изменяете набор символов при работе MySQL (это может изменять порядок сортировки), Вы должны выполнить myisamchk -r -q на всех таблицах. Иначе Ваши индексы нельзя упорядочивать правильно.
Когда пользователь соединяется с сервером MySQL, тот посылает заданный по умолчанию набор символов пользователю.
Нужно использовать mysql_real_escape_string()
при выходе из
строк для запроса SQL. mysql_real_escape_string()
идентичен
старой функции mysql_escape_string()
, за исключением того, что
требуется дескриптор подключения MYSQL как первый параметр.
Если клиент компилируется с другими путями, чем те, где сервер установлен, и администратор, который конфигурировал MySQL, не включал все наборы символов в двоичный файл MySQL, нужно определить для клиента, где он сможет находить дополнительные наборы символов, а это будет требоваться, если сервер выполняется с другим набором символов.
Можно определять это, включая в файл опции MySQL:
[client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
Где path указывает на то, где сохранены динамические наборы символов MySQL. Можно вынуждать клиента использовать специфический набор символов:
[client] default-character-set=character-set-name
Но обычно этого не требуется.
mysqld
может выдавать сообщения об ошибках на следующих
языках: Czech, Danish, Dutch, English (по умолчанию), Estonian, French,
German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Norwegian-ny,
Polish, Portuguese, Romanian, Russian, Slovak, Spanish и Swedish.
Чтобы запустить mysqld
для специфического языка, используйте
параметр --language=lang
или -L lang
. Например:
shell> mysqld --language=swedish
или:
shell> mysqld --language=/usr/local/share/swedish
Обратите внимание, что все имена языка определены в нижнем регистре.
Файлы языка размещены (по умолчанию) в каталоге `mysql_base_dir/share/ЯЗЫК'.
Чтобы модифицировать файл сообщений об ошибках, Вы должны редактировать файл errmsg.txt и выполнить следующую команду, чтобы генерировать новую версию файла errmsg.sys:
shell> comp_err errmsg.txt errmsg.sys
Если Вы обновляете версию MySQL, не забудьте повторить Ваши изменения с новым файлом `errmsg.txt'.
Чтобы добавить другой набор символов к MySQL, используйте следующую процедуру.
Решите, является ли набор простым или сложным. Если набор символов не должен использовать специальную строку, сопоставляющую подпрограммы для сортировки, и не нуждается в поддержке многобайтных символов, он простой. Если требуется любое из этих свойств, набор считается сложным.
Например, latin1
и danish
простые, а вот
big5
или czech
сложные наборы символов.
В следующем разделе я предположил, что Вы называете Ваш набор символов
MYSET
.
Для простого набора символов делают следующее:
ctype
принимает первые 257 слов. После этого массивы
to_lower
, to_upper
и sort_order
берут
по 256 слов каждый.CHARSETS_AVAILABLE
и спискам
COMPILED_CHARSETS
в configure.in
.
Для сложного набора символов делают следующее:
ctype_MYSET
,
to_lower_MYSET
и так далее. Это соответствует массивам в
простом наборе символов.
/* * This comment is parsed by configure to create ctype.c, * so don't change it unless you know what you are doing. * * .configure. number_MYSET=MYNUMBER * .configure. strxfrm_multiply_MYSET=N * .configure. mbmaxlen_MYSET=N */Программа выбора конфигурации
configure
использует этот
комментарий, чтобы автоматически включить набор символов в библиотеку MySQL.
Параметры-строки strxfrm_multiply и mbmaxlen будут подробно объясняться в
следующих разделах. Включите их только, если нужны строка, сопоставляющая
функции сортировки, или функция многобайтного набора символов соответственно.
my_strncoll_MYSET()
my_strcoll_MYSET()
my_strxfrm_MYSET()
my_like_range_MYSET()
CHARSETS_AVAILABLE
и спискам
COMPILED_CHARSETS
в файле configure.in
.
Файл sql/share/charsets/README включает дополнительные команды.
Если Вы хотите иметь набор символов, включенный в дистрибутив MySQL, отправьте по почте заплатку на [email protected].
to_lower[]
и to_upper[]
представляют собой
простые массивы, которые хранят символы нижнего и верхнего регистров,
соответствующие каждому члену набора символов. Например:
to_lower['A'] should contain 'a' to_upper['a'] should contain 'A'
Массив sort_order[]
представляет собой карту, указывающую,
как символы нужно упорядочивать для целей сортировки и сравнения. Для многих
наборов символов это то же самое, что и to_upper[]
(что
означает: сортировать, не учитывая регистр). MySQL сортирует символы,
основанные на значении sort_order[character]
. Для более сложных
правил сортировки изучите обсуждение сопоставления строк ниже. Подробности в
разделе "4.6.5 Сопоставление строк
".
ctype[]
представляет собой массив разрядных значений, с одним
элементом для одного символа. Обратите внимание, что массивы
to_lower[]
, to_upper[]
и sort_order[]
индексированы символьным значением, но ctype[]
индексирован
символьным значением+1. Это старое наследство, чтобы обработать EOF.
Вы можете находить следующие определения bitmask в m_ctype.h:
#define _U 01 /* Uppercase */ #define _L 02 /* Lowercase */ #define _N 04 /* Numeral (digit) */ #define _S 010 /* Spacing character */ #define _P 020 /* Punctuation */ #define _C 040 /* Control character */ #define _B 0100 /* Blank */ #define _X 0200 /* heXadecimal digit */
Запись в ctype[]
для каждого символа должна быть объединением
применимых значений bitmask, которые описывают символ. Например,
'A'
представляет собой символ верхнего регистра
(_U
) также как шестнадцатеричная цифра (_X
), так
что ctype['A'+1]
должен содержать значение:
_U + _X = 01 + 0200 = 0201
Если правила сортировки для Вашего языка слишком сложны, чтобы быть
обработанными таблицей sort_order[]
, Вы должны использовать
строку, сопоставляющую функции.
Сейчас самая лучшая документация по этому вопросу, это наборы символов, которые уже выполнены. Рассмотрите наборы символов big5, czech, gbk, sjis и tis160 для примеров.
Вы должны определить значение strxfrm_multiply_MYSET=N
в
специальном комментарии наверху файла. N
должен быть установлен
к максимальному коэффициенту роста строки в ходе выполнения
my_strxfrm_MYSET
(это должно быть положительное целое число).
Если нужно добавить поддержку для нового набора символов, который включает многобайтные символы, Вы должны использовать функции многобайтных символов.
Сейчас самая лучшая документация по этому вопросу, это наборы символов,
которые уже выполнены. Рассмотрите наборы символов euc_kr, gb2312, gbk, sjis
и ujis для примеров. Они выполнены в файлах ctype-'charset'.c
в
каталоге strings.
Вы должны определить значение mbmaxlen_MYSET=N
в специальном
комментарии наверху исходного файла. N
должен быть установлен в
размер в байтах самого большого символа в наборе.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |