На главную Напишите нам! Напишите нам!
14-11-2012
колонтитул в word 2007, 0000002111

MySQL и использование национальных алфавитов

По умолчанию в MySQL используется набор символов ISO-8859-1 (Latin1) с сортировкой согласно шведским/финским правилам. Этот набор символов также подходит для использования в США и Западной Европе.

Все стандартные исполняемые файлы MySQL компилируются с настройкой --with-extra-charsets=complex. Таким образом в файл помещается код, позволяющий всем стандартным программам работать с набором символов latin1, а также многобайтовыми наборами символов. Другие наборы символов могут загружаться из соответствующих файлов определений по необходимости.

Набор определяет, какие символы могут использоваться в именах, а также способ сортировки значений в операторах ORDER BY и GROUP BY команды SELECT.

При запуске сервера можно изменить набор символов при помощи параметра --default-character-set. Выбрать доступные наборы символов можно при помощи параметров --with-charset=charset и --with-extra-charsets= список-кодировок | complex | all, и файлов наборов символов, перечисленных в SHAREDIR/charsets/Index.

При смене набора символов во время работы MySQL (что может одновременно изменить и порядок сортировки) необходимо запустить команду myisamchk -r -q --set-character-set=charset для всех таблиц. В противном случае индексы могут быть созданы в неправильном порядке.

При подключении клиента к серверу MySQL сервер отправляет ему используемый по умолчанию набор символов. На время соединения клиент переключается на использование этого набора.

Для экранирования строк в SQL-запросе необходимо пользоваться функцией mysql_real_escape_string(). mysql_real_escape_string() идентична старой функции mysql_escape_string() - во всем, кроме одного: в качестве первого параметра она принимает дескриптор соединения MYSQL.

Если клиент был скомпилирован с набором путей, в которых не было пути установки сервера, а настраивавший MySQL пользователь на включил в исполняемый файл системы все наборы символов, клиенту необходимо сообщить о местонахождении дополнительных наборов символов, которые нужны ему для общения с сервером.

Сделать это можно путем внесения в файл настроек MySQL следующей строки:

[client]
character-sets-dir=/usr/local/mysql/share/mysql/charsets

путь в ней указывает на каталог, в котором хранятся динамические наборы символов MySQL.

Заставить клиента использовать определенный набор символов можно следующим образом:

[client]
default-character-set=character-set-name

но обычно этого не требуется.

Сообщения об ошибках на языках, отличных от английского

mysqld может выдавать сообщения об ошибках на следующих языках: чешском, датском, голландском, английском (по умолчанию), эстонском, французском, немецком, греческом, венгерском, итальянском, японском, корейском, норвежском, новонорвежском, польском, португальском, румынском, русском, словацком, испанском и шведском.

При запуске mysqld выбрать определенный язык можно при помощи настройки --language=язык или -L язык. Например:

shell> mysqld --language=swedish
или:
shell> mysqld --language=/usr/local/share/swedish

Обратите внимание: названия языков вводятся в нижнем регистре.

Файлы языков по умолчанию располагаются в папке mysql_base_dir/share/LANGUAGE/.

Для того чтобы изменить тексты сообщений об ошибках, нужно отредактировать файл errmsg.txt и запустить следующую команду для генерации нового файла errmsg.sys:

shell> comp_err errmsg.txt errmsg.sys

Установив новую версию MySQL, не забудьте внести те же изменения в новый файл errmsg.txt.

Добавление набора символов

Снабдить MySQL новым набором символов можно следующим образом.

Определите, является ли новый набор символов простым или сложным. Если для работы с этим набором никаких специальных процедур обработки строк и поддержки многобайтовых символов не требуется, он является простым. Если вышеперечисленные возможности необходимы, этот набор символов относится к сложным.

Например, наборы latin1 и danish - простые, а big5 и czech - сложные.

Для всех приведенных ниже примеров предполагается, что используемый набор символов называется MYSET.

Для создания простого набора достаточно сделать следующее:

  1. Вставьте имя MYSET в конец файла sql/share/charsets/Index и присвойте этому набору символов уникальный номер.

  2. Создайте файл sql/share/charsets/MYSET.conf. (в качестве основы можно использовать файл sql/share/charsets/latin1.conf). Правила составления этого файла очень просты:

    • Комментарием считается целая строка, начинающаяся с символа #.

    • Слова разделяются любым количеством непечатаемых символов.

    • При определении набора символов каждое слово должно представлять собой число в шестнадцатеричной системе счисления.

    • Массив ctype занимает первых 257 слов. За ним следуют массивы to_lower, to_upper[] и sort_order[], каждый из которых занимает 256 слов.

  3. Добавьте имя набора символов в списки CHARSETS_AVAILABLE и COMPILED_CHARSETS файла configure.in.

  4. Перенастройте, перекомпилируйте и протестируйте систему.

Для создания сложного набора необходимо выполнить следующие действия:

  1. Создайте файл strings/ctype-MYSET.c в исходном дистрибутиве MySQL.

  2. Вставьте имя MYSET в конец файла sql/share/charsets/Index и присвойте этому набору символов уникальный номер.

  3. Просмотрите один из существующих файлов ctype-*.c (например strings/ctype-big5.c) и узнайте, что нужно определить. Не забывайте, что имена массивов в вашем файле должны быть похожи на следующие: ctype_MYSET, to_lower_MYSET и т.п. Эти имена соответствуют именам массивов из простого набора символов.

  4. В начале файла целесообразно поместить комментарий наподобие следующего:

    /*
    этот комментарий разбирается configure для создания ctype.c,
    поэтому не меняйте его, если не уверены в правильности своих действий.
    *
    .configure. number_MYSET=MYNUMBER
    .configure. strxfrm_multiply_MYSET=N
    .configure. mbmaxlen_MYSET=N
    */
    

    Программа configure использует этот комментарий для линкования набора символов с библиотекой MySQL. Значение строк strxfrm_multiply и mbmaxlen будет разъяснено ниже. Использовать их нужно только в том случае, если вам нужны функции для сортировки строк или работы с многобайтовыми наборами символов соответственно.

  5. После этого нужно создать некоторые из следующих функций:

    • my_strncoll_MYSET()

    • my_strcoll_MYSET()

    • my_strxfrm_MYSET()

    • my_like_range_MYSET()

  6. Добавьте имя набора символов в списки CHARSETS_AVAILABLE и COMPILED_CHARSETS файла configure.in.

  7. Перенастройте, перекомпилируйте и протестируйте систему.

Более подробные инструкции приведены в файле sql/share/charsets/README.

Если вы хотите, чтобы ваш набор символов был включен в комплект поставки MySQL, вышлите патч с ним по адресу <internals@lists.mysql.com>.

колонтитулы в word 2007, 000000211111
Класс!
 
Яндекс.Метрика
Копирование возможно при указании прямой индексируемой гиперссылки
0000002