Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
Если сервер обнаруживает различие между установленным для клиента набором символов и хранимым в базе данных, то автоматически будет выполнена трансляция - "транслитерация" - в предположении, что входящие коды являются корректными для клиентской кодовой страницы. Входящие коды будут преобразовываться в коды, корректные для соответствующих символов в наборе символов объекта хранения.
Это делает возможным хранение текстов в различных объектах, которые имеют наборы символов, отличные от набора символов
Если наборы символов клиента и объекта одни и те же, то сервер предполагает, что получаемые им коды из этого набора символов, и сохраняет их без изменения. Неприятности возникают, если данные не являются такими, как об этом сообщил клиент. Когда данные выбираются, отыскиваются или восстанавливаются после резервного копирования, это приводит к ошибкам транслитерации.
Более подробную информацию об ошибках транслитерации и их исправлении см. в разд. "Транслитерация " далее в этой главе.
Приложения, подключающиеся к базе данных, должны передавать набор символов базы данных в API через блок параметров базы данных (Database Parameter Block, DPB) в параметре isc_dpb_ic_ctype. Приложение ESQL - включая утилиту isql - должно выполнить оператор SET NAMES непосредственно перед оператором CONNECT. Команда SET NAMES <набор-символов> используется для установки набора символов в утилите isql. Графический интерфейс инструментов администратора обычно предоставляет возможность выбора или явного указания клиентского набора символов.
Если вам нужно использовать язык, отличный от английского, потратьте некоторое время на изучение доступных наборов символов и выбора того, который наиболее соответствует вашим требованиям к вводу, хранению и выводу текстов. Не забудьте включить этот набор символов в атрибуты базы данных при создании базы данных. Синтаксис см. в разд. "Обязательные и необязательные атрибуты" главы 15. Список наборов символов, распознаваемых Firebird, см. в приложении 8.
Переопределение набора символов
Имея глобальный набор символов по умолчанию для базы данных, вы можете при необходимости в дальнейшем переопределить его. Вы можете включить атрибут набора символов при определении домена. Вы можете переопределить значение набора символов по умолчанию для базы данных или для домена при определении индивидуального столбца.
! ! !
ВНИМАНИЕ! Когда столбцы используют значение набора символов по умолчанию для базы данных, изменение набора символов по умолчанию для базы данных повлияет только на вновь создаваемые столбцы и домены. Существующие столбцы сохранят имеющееся значение набора символов.
. ! .
Наборы символов Firebird
Firebird поддерживает увеличивающееся количество интернациональных наборов символов, включая 2- и 3-байтовые наборы Unicode. Во многих случаях возможен выбор
* происхождение наборов символов;
* глобальные наборы символов по умолчанию для базы данных;
* альтернативные наборы символов и последовательности сортировки для доменов и столбцов;
• последовательности сортировки для:
• текстовых значений в операциях сравнения;
• предложений ORDER BY и GROUP BY;
• как указать серверу необходимость трансляции вводимых данных в конкретный набор символов.
Набор символов является собранием символов, который включает, по меньшей мере, один репертуар символов. Репертуар символов является набором символов, используемым в конкретной культуре для публикаций, письменной коммуникации и - в контексте базы данных - для компьютерного ввода и вывода. Например, ISO Latin 1 является набором символов, который охватывает английский (А, В, С ... Z) и французский (А, А, А, В, С, Q, D ... Z) репертуары, делающие его полезным для обоих сообществ.
Большинство наборов символов Firebird определены на основании стандартов и их имена близко соответствуют этим стандартам. Например, Microsoft определяет Windows 1251, a Firebird реализует его как WIN1251. Набор символов ISO8859_1 является "набором символов, определенным в стандарте ISO 8859-1, кодированным значениями, определенными в стандарте ISO 8859-1, каждое значение представлено одним 8-битовым байтом".
Имена алиасов наборов символов поддерживают разницу в именовании стандартов между платформами. Например, если вы найдете, что в операционной системе используется идентификатор WIN 1251 для набора символов WIN1251, вы можете использовать алиас, определенный в системной таблице RDB$TYPES, как описано в следующем разделе.
Наборы символов в настоящий момент "зашиты" в базу данных с момента ее создания. Одной из системных таблиц, создаваемых автоматически, является RDB$CHARACTER_SET. Для отображения имен наборов символов с последовательностью сортировки каждого из них выполните запрос:
SELECT
RDB$CHARACTER_SET_NAME,
RDB$DEFAULT_COLLATE_NAME,
RDB$BYTES_PER_CHARACTER
FROM RDB$CHARACTER_SETS
ORDER BY 1 ;
Если требуется, алиасы помещаются в RDB$TYPES- другую системную таблицу, которая хранит список алиасов, используемых сервером базы данных. Для просмотра всех алиасов, которые были установлены во время создания базы данных, выполните следующий запрос, который фильтрует RDB$TYPES для просмотра только имен наборов символов: