Кодировка символьных данных таблицы
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
<Идентификатор кодировки>должен быть представлен в системной таблице $$$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));