Поддержка кодовых страниц

В СУБД ЛИНТЕР каждое значение типа CHAR во внутреннем представлении снабжается информацией о его кодировке. Это позволяет прозрачным для пользователя способом организовывать работу с различными кодировками.

Для понимания использования различных кодировок необходимо представлять источники, из которых определяется кодировка той или иной строки:

  1. все символьные литералы внутри исходного текста процедуры (триггера) имеют кодировку, в которой работал клиент на момент создания этой процедуры (триггера);

  2. при передаче символьных параметров в хранимую процедуру информация о кодировке извлекается из самого параметра, т.е. кодировка соответствует текущей рабочей кодировке клиента, подавшего запрос EXECUTE на исполнение процедуры, либо кодировке строки, переданной в данную процедуру из другой процедуры;

  3. при вызове триггера кодировка символьных данных в переменных OLD и NEW соответствует текущей рабочей кодировке канала, по которому исполняется вызвавший триггер запрос;

  4. при извлечении данных курсором кодировка символьных полей соответствует текущей рабочей кодировке канала, по которому работает открывшая курсор хранимая процедура (триггер);

  5. при присвоении символьного значения переменной, данное значение сохраняется в переменной вместе с информацией о его кодировке (т.е. значение записывается без каких бы то ни было преобразований);

  6. в бинарных операциях (например, конкатенация или сравнение строк) кодировка правого операнда преобразуется к кодировке левого операнда, и результат будет сохранен в кодировке левого операнда;

  7. при выполнении запросов из хранимых процедур (триггеров) кодировка строки преобразуется к кодировке канала, по которому работает открывшая курсор хранимая процедура (триггер).

Надо помнить, что не всегда символы некоторой кодовой страницы могут быть преобразованы к символам другой кодовой страницы. Иногда преобразование может происходить с потерями (например, недопустимые символы могут заменяться знаком вопроса «?»).