Общие правила при работе с кириллическими символами

Отбросив различные нюансы можно кратко сформулировать следующие общие правила:

  1. Для самой возможности работы с кириллицей для БД должны быть установлены кодировки, поддерживающие кириллицу:

    set database default character set "KOI8-R";
    set database names "KOI8-R";

    Проверить установленные настройки можно выполнив запросы:

    • для пользовательских таблиц (если установлена по SET DATABASE DEFAULT CHARACTER SET):

      select name from $$$charset where ident=(select getword($$$s14,134) from $$$sysrl where rowid=1);
    • для системных таблиц (если установлена по SET DATABASE NAMES):

      select name from $$$charset where ident=(select getword($$$s14,116) from $$$sysrl where rowid=1);

    Для установленных кодировок KOI8-R мы должны увидеть значения KOI8-R.

    Для установленных кодировок CP1251 мы должны увидеть значения CP1251.

    Если кодировки не были установлены, то мы получим пустые выборки.

  2. Клиентская часть должна корректно устанавливать кодировку, в которой будет отправлять/получать данные.

    При работе из клиентского приложения мы должны указать кодировку, в которой мы отправляем в СУБД данные – это можно сделать либо с помощью функций API, либо через переменную окружения LINTER_CP, или через команду "set names". СУБД сама cконвертирует данные из кодировки хранения в БД в нужную для клиента кодировку и обратно.

    Если же мы не зададим кодировку явно, то она будет задана в соответствии с настроенным окружением операционной системы. Полагаться на окружение опасно, так как оно может быть разным на разных рабочих местах или версиях ОС.