Кодировка символьных данных таблицы
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
< Идентификатор кодировки >
должен быть представлен в системной таблице $$$CHARSET. -
Для использования
< встроенных кодировок >
наличие в БД системной таблицы $$$CHARSET не обязательно.
Общие правила
-
< Кодировка >
задает имя кодовой страницы – набор символов, в которых будут храниться в БД все символьные данные типа CHAR, VARCHAR таблицы (за исключением столбцов, для которых задана индивидуальная кодировка, см. спецификацию < тип данных >). -
Если от клиентского приложения символьные данные поступили в иной кодировке, то они будут преобразованы в заданную
< кодировку >
. -
При выполнении SQL-запроса выборки данных, хранящиеся в заданной
< кодировке >
символьные данные результирующей выборки данных преобразуются в кодировку клиентского приложения. -
При создании системных таблиц для символьных данных всегда используется кодировка системного словаря (по умолчанию это кодировка DEFAULT, она может быть изменена командой SET DATABASE NAMES).
-
Для обычных базовых таблиц, если
< кодировка >
символьных данных таблицы не задана:-
используется кодировка, заданная командой SET NAMES;
-
если кодировка не задана командой SET NAMES, то используется кодировка, заданная командой SET DATABASE DEFAULT CHARACTER SET;
-
если обе указанные выше кодировки не заданы, то используется кодировка системного словаря БД, заданная командой SET DATABASE NAMES;
-
если не задана ни одна из кодировок предыдущих пунктов, то используется кодировка DEFAULT (кодировка поддерживает первые 128 символов кодировки "CP437").
-
-
С помощью кодировки UTF-8 можно обеспечить многоязыковую поддержку пользовательского приложения в СУБД ЛИНТЕР без создания таблицы $$$CHARSET.
-
При задании для столбца многобайтовой кодировки (UTF-8, EUC_JP и т.д.) следует иметь в виду, что размер столбца задаётся в байтах, а каждый символ в многобайтовой кодировке может занимать несколько байтов, т.е. в столбце с многбайтовой кодировкой может поместиться значительно меньше символов, чем размер этого столбца в байтах.
Например, в кодировке UTF-32 китайские иероглифы представлены 4 байтами, поэтому строка длиной 40 байтов может содержать не более 10 символов-иероглифов.
Примеры
-
Кодировка cp1251 будет преобразована к верхнему регистру и найдена в таблице $$$CHARSET (хранится в таблице как CP1251):
create or replace table test character set cp1251 (ch char(10));
-
Кодировка cp1251 будет использована как есть и не будет найдена в таблице $$$CHARSET (хранится в таблице как CP1251):
create or replace table test character set "cp1251" (ch char(10));
-
Кодировка KOI8-R будет использована как есть и будет найдена в таблице $$$CHARSET (кавычки нужны из-за дефиса в имени кодировки) (хранится в таблице $$$CHARSET как KOI8-R):
create or replace table test character set "KOI8-R" (ch char(10));