В только что созданной базе данных таблицы $$$CHARSET и $$$TRANSL отсутствуют, и для работы базы данных используется интегрированная кодовая страница 20127(US-ASCII), имеющая имя «DEFAULT» и содержащая 127 символов. После создания системного словаря эта кодовая страница может быть подменена любой другой, носящей то же имя. Таким образом, кодовая страница «DEFAULT» является первой кодовой страницей по умолчанию в базе данных. Кодовая страница по умолчанию используется в двух случаях:
• в символах этой кодовой страницы хранится системный словарь (названия таблиц, столбцов, триггеров, процедур и т. д.);
• при создании таблиц и столбцов без явного указания кодовой страницы, им назначается кодовая страница базы данных по умолчанию.
В настоящее время кодовая страница по умолчанию может быть только однобайтовой. Сменить кодовую страницу по умолчанию можно с помощью SQL- команды «SET DATABASE NAMES …;». Например команда «SET DATABASE NAMES CP866;» устанавливает по умолчанию кодовую страницу 866. Если вслед за этим подать команду «CREATE TABLE A (B CHAR(5));», то для таблицы A и столбца B будет установлена кодовая страница 866. Если же, например, подать команду «CREATE TABLE A (B CHAR(5) CHARACTER SET CP1251);», то для столбца B будет установлена кодовая страница 1251.
Для нормальной работы с кодовой страницей рекомендуется явно задать ее на клиентской части. Это проще всего сделать, задав переменную окружения:
set LINTER_CP=CP932
Этот пример для случая, если мы хотим работать с японской SJIS-кодовой страницей CP932.
Данные в столбцах в произвольной национальной кодовой странице могут храниться двумя способами:
• в текстовых столбцах таблиц с заданной национальной кодовой страницей;
• в UNICODE-столбцах таблиц.
В качестве длин текстовых полей указывается их размер в байтах.
Проиллюстрируем оба этих способа на примере японской кодовой страницы CP932 (эта японская кодовая страница содержит как однобайтовые, так и двухбайтовые символы.):
CREATE TABLE TBL_JP( JSTR CHAR( 30 ) CHARACTER SET CP932 ); INSERT INTO TBL_JP VALUES ('???1'); INSERT INTO TBL_JP VALUES ('???2');
