Наборы символов и последовательность сортировки
Наборы символов и последовательность сортировки
Набор символов, выбранный для хранения текстовых данных, определяет:
* символы, которые могут быть использованы в столбцах CHAR, VARCHAR и BLOB SUB_TYPE | (текст);
* число байтов, выделяемых для каждого символа;
* последовательность сортировки по умолчанию (алфавитно-цифровой порядок), используемая при сортировке столбцов CHAR и VARCHAR (столбцы BLOB не могут сортироваться - так что последовательность сортировки для них не применяется).
Если для столбца вы не укажете набор символов, то для него будет использован набор символов по умолчанию базы данных. Если для базы данных не указан набор символов по умолчанию, то столбец получит значение CHARACTER SET NONE. ЕСЛИ ваша база данных используется в окружении, где присутствует только английский язык, у вас может появиться соблазн не использовать набор символов. Не соблазняйтесь! Набор символов NONE безропотно примет любые однобайтовые символы. Проблемы появятся- в неанглийском окружении или при наличии смешанных языков- вы получите ошибку транслитерации при выборе ваших текстовых данных. То, что уходит, не всегда то же самое, что приходит!
Текст, вводимый с клавиатуры или с других устройств ввода, например с устройства считывания штрихового кода, особым образом кодируется в соответствии с некоторой стандартной кодовой страницей, которая может быть связана с диалектом, заданным при установке вводящего устройства. Обычно входные устройства снабжаются программами-адаптерами, дающими возможность пользователям по желанию переключать кодовую страницу.
В одной кодовой странице числовой код, соответствующий образу некоторого символа, может отличаться от кода в другой кодовой странице. В основном каждый набор символов Firebird отображает некоторую кодовую страницу или группу связанных кодовых страниц. Некоторые наборы символов работают более чем с одной кодовой страницей, в отдельных случаях кодовая страница будет работать более чем с одним набором символов. Различные языки могут использовать один общий набор символов, но по-разному отображая пары прописные/строчные буквы, символы валюты и др.
Помимо набора символов различные страны, языки и даже культурные группы, применяющие то же самое распределение символов, используют различные последовательности для определения "алфавитно-цифрового порядка" для сортировки и сравнений. Следовательно, для большинства наборов символов Firebird предоставляет множество последовательностей сортировки. Некоторые последовательности сортировки также учитывают пары прописные/строчные буквы для решения задачи упорядочивания, не чувствительного к регистру. Предложение COLLATE используется в отдельных контекстах, где важна последовательность сортировки, хотя оно и не объявляется на уровне базы данных.
Серверу нужно знать, какой набор символов используется при хранении данных, чтобы определить размер требуемой памяти и оценить характеристики сортировки для правильного упорядочивания, сравнения, перевода символов в верхний и нижний регистры и т.д. Помимо этого, он безразличен к символам вводимого текста.
Набор символов клиента
Что по-настоящему имеет значение в отношении наборов символов - это взаимодействие между сервером и клиентом. Клиентская библиотека Firebird должна передавать атрибут набора символов как часть параметров запроса на соединение.
Если сервер обнаруживает различие между установленным для клиента набором символов и хранимым в базе данных, то автоматически будет выполнена трансляция - "транслитерация" - в предположении, что входящие коды являются корректными для клиентской кодовой страницы. Входящие коды будут преобразовываться в коды, корректные для соответствующих символов в наборе символов объекта хранения.
Это делает возможным хранение текстов в различных объектах, которые имеют наборы символов, отличные от набора символов базы данных по умолчанию.
Если наборы символов клиента и объекта одни и те же, то сервер предполагает, что получаемые им коды из этого набора символов, и сохраняет их без изменения. Неприятности возникают, если данные не являются такими, как об этом сообщил клиент. Когда данные выбираются, отыскиваются или восстанавливаются после резервного копирования, это приводит к ошибкам транслитерации.
Более подробную информацию об ошибках транслитерации и их исправлении см. в разд. "Транслитерация " далее в этой главе.
Приложения, подключающиеся к базе данных, должны передавать набор символов базы данных в API через блок параметров базы данных (Database Parameter Block, DPB) в параметре isc_dpb_ic_ctype. Приложение ESQL - включая утилиту isql - должно выполнить оператор SET NAMES непосредственно перед оператором CONNECT. Команда SET NAMES <набор-символов> используется для установки набора символов в утилите isql. Графический интерфейс инструментов администратора обычно предоставляет возможность выбора или явного указания клиентского набора символов.
Если вам нужно использовать язык, отличный от английского, потратьте некоторое время на изучение доступных наборов символов и выбора того, который наиболее соответствует вашим требованиям к вводу, хранению и выводу текстов. Не забудьте включить этот набор символов в атрибуты базы данных при создании базы данных. Синтаксис см. в разд. "Обязательные и необязательные атрибуты" главы 15. Список наборов символов, распознаваемых Firebird, см. в приложении 8.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Собственные наборы символов и способы сортировки
Собственные наборы символов и способы сортировки Сами кодировки хранятся в файле gdsintl.dll, который находится в каталоге %INTERBASE%Intl. Вы можете самостоятельно разрабатывать и подключать свои собственные наборы символов и COLATION ORDERS в InterBase и во все его клоны. Для их разработки
10.1. Наборы символов и объединения вообще
10.1. Наборы символов и объединения вообще Набор символов представляет собой множество символов и их кодов. Объединение задает набор правил для сравнения символов в наборе символов. Давайте сделаем различие явным с помощью примера.Предположите, что мы имеем алфавит с
10.10. Наборы символов и объединения, которые поддерживает MySQL
10.10. Наборы символов и объединения, которые поддерживает MySQL MySQL поддерживает свыше 70 объединений для более 30 наборов символов. Этот раздел указывает, которые наборы символов MySQL поддерживает. Имеется один подраздел для каждой группы связанных наборов символов. Для
10.10.1. Наборы символов Unicode
10.10.1. Наборы символов Unicode MySQL имеет два набора символов Unicode. Вы можете сохранять текст приблизительно для 650 языков, используя эти наборы символов.Объединения ucs2 (UCS-2 Unicode):ucs2_bin ucs2_czech_ci ucs2_danish_ci ucs2_esperanto_ci ucs2_estonian_ci ucs2_general_ci (default) ucs2_hungarian_ci ucs2_icelandic_ci ucs2_latvian_ci ucs2_lithuanian_ci ucs2_persian_ci
10.10.2. Западноевропейские наборы символов
10.10.2. Западноевропейские наборы символов Западноевропейские наборы символов покрывают большинство западноевропейских языков, типа French, Spanish, Catalan, Basque, Portuguese, Italian, Albanian, Dutch, German, Danish, Swedish, Norwegian, Finnish, Faroese, Icelandic, Irish, Scottish и English.Объединения ascii (US ASCII):ascii_bin ascii_general_ci (значение по
10.10.3. Центральноевропейские наборы символов
10.10.3. Центральноевропейские наборы символов MySQL обеспечивает поддержку для наборов символов, используемых в Czech Republic, Slovakia, Hungary, Romania, Slovenia, Croatia и Poland.Объединения cp1250 (Windows Central European):cp1250_bin cp1250_croatian_ci cp1250_czech_cs cp1250_general_ci (значение по умолчанию) cp1250_polish_ciОбъединения cp852 (DOS Central
10.10.4. Южноевропейские и ближневосточные наборы символов
10.10.4. Южноевропейские и ближневосточные наборы символов Южныоевропейские и ближневосточные наборы символов, обеспечиваемые MySQL, включают Armenian, Arabic, Georgian, Greek, Hebrew и Turkish.Объединения armscii8 (ARMSCII-8 Armenian):armscii8_bin armscii8_general_ci (значение по умолчанию)Объединения cp1256 (Windows Arabic):cp1256_bin
10.10.5. Балтийские наборы символов
10.10.5. Балтийские наборы символов Балтийские наборы символов охватывают Estonian, Latvian и Lithuanian.Объединения cp1257 (Windows Baltic):cp1257_bin cp1257_general_ci (значение по умолчанию) cp1257_lithuanian_ciОбъединения latin7 (ISO 8859-13 Baltic):latin7_bin latin7_estonian_cs latin7_general_ci (значение по умолчанию)
10.10.6. Наборы символов кириллицы
10.10.6. Наборы символов кириллицы Наборы символов и объединения кириллицы для использования с Belarusian, Bulgarian, Russian и Ukrainian.Объединения cp1251 (Windows Cyrillic):cp1251_bin cp1251_bulgarian_ci cp1251_general_ci (значение по умолчанию) cp1251_general_cs cp1251_ukrainian_ciОбъединения cp866 (DOS Russian): cp866_bin cp866_general_ci (значение по
10.10.7. Азиатские наборы символов
10.10.7. Азиатские наборы символов Азиатские наборы символов, которые поддерживает пакет, включают Chinese, Japanese, Korean и Thai. Они могут быть усложнены. Например, китайские наборы должны учесть тысячи различных символов.Объединения big5 (Big5 Traditional Chinese):big5_bin big5_chinese_ci (значение по
Специальные наборы символов
Специальные наборы символов Основное правило для наборов символов то, что каждый байт (пара или тройка байтов в случае многобайтовых наборов) специально определен по стандарту его реализации. Существует четыре особых исключения - NONE, OCTETS, ASCII и UNICODE FSS. В табл. 11.1 показаны
Приложение 8. Наборы символов и порядков сортировки
Приложение 8. Наборы символов и порядков сортировки В табл. П8.1 содержатся наборы символов и порядки сортировки, которые существовали на момент создания Firebird 1.5.0. Некоторые из указанных элементов недоступны в более ранних версиях Firebird. Если вы инсталлировали более