×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

3.8.3. Поддержка кодировок

3.8.3.1. Поддерживаемые кодировки
3.8.3.2. Настройка кодировки
3.8.3.3. Автоматическое преобразование кодировок между сервером и клиентом
3.8.3.4. Доступные преобразования кодировок
3.8.3.5. Дополнительная литература

Поддержка кодировок в Digital Q.DataBase позволяет хранить текст в различных кодировках (также называемых наборами символов), включая однобайтовые кодировки (например, серию ISO 8859) и многобайтовые кодировки, такие как EUC (Extended Unix Code), UTF-8 и внутренний код Mule. Все поддерживаемые кодировки могут прозрачно использоваться клиентами, но некоторые из них не поддерживаются непосредственно сервером (то есть в качестве серверной кодировки). Кодировка по умолчанию выбирается при инициализации Digital Q.DataBase кластера баз данных с помощью initdb. Данный параметр можно переопределить при создании базы данных, что позволяет использовать несколько баз данных с различными кодировками.

Однако важным ограничением является то, что кодировка каждой базы данных должна быть совместима с настройками LC_CTYPE (классификация символов) и LC_COLLATE (порядок сортировки строк) локали. Для C или POSIX локали допускается любая кодировка, но для других локалей, предоставляемых libc, существует только одна кодировка, которая будет работать корректно. (Однако в Windows кодировка UTF-8 может использоваться с любой локалью.) Если настроена поддержка ICU, локали ICU можно использовать с большинством, но не со всеми серверными кодировками.

3.8.3.1. Поддерживаемые кодировки #

Таблица 3.8.3 содержит список кодировок, доступных для использования в Digital Q.DataBase.

Таблица 3.8.3. Digital Q.DataBase Кодировки

НаименованиеОписаниеЯзыкСервер?ICU?Байт/&zwsp;символПсевдонимы
BIG5Big FiveТрадиционный китайскийНетНет1–2WIN950, Windows950
EUC_CNExtended UNIX Code-CNУпрощенный китайскийДаДа1–3 
EUC_JPExtended UNIX Code-JPЯпонскийДаДа1–3 
EUC_JIS_2004Extended UNIX Code-JP, JIS X 0213ЯпонскийДаНет1–3 
EUC_KRExtended UNIX Code-KRКорейскийДаДа1–3 
EUC_TWExtended UNIX Code-TWТрадиционный китайский, тайваньскийДаДа1–4 
GB18030Национальный стандартКитайскийНетНет1–4 
GBKРасширенный национальный стандартУпрощенный китайскийНетНет1–2WIN936, Windows936
ISO_8859_5ISO 8859-5, ECMA 113Латиница/КириллицаДаДа1 
ISO_8859_6ISO 8859-6, ECMA 114Латиница/АрабскийДаДа1 
ISO_8859_7ISO 8859-7, ECMA 118Латиница/Греческий языкДаДа1 
ISO_8859_8ISO 8859-8, ECMA 121Латиница/ИвритДаДа1 
JOHABJOHABКорейский (хангыль)НетНет1–3 
KOI8RKOI8-RКириллица (русский язык)ДаДа1KOI8
KOI8UKOI8-UКириллица (украинский язык)ДаДа1 
LATIN1ISO 8859-1, ECMA 94ЗападноевропейскаяДаДа1ISO88591
LATIN2ISO 8859-2, ECMA 94ЦентральноевропейскаяДаДа1ISO88592
LATIN3ISO 8859-3, ECMA 94ЮжноевропейскаяДаДа1ISO88593
LATIN4ISO 8859-4, ECMA 94СевероевропейскаяДаДа1ISO88594
LATIN5ISO 8859-9, ECMA 128ТурецкийДаДа1ISO88599
LATIN6ISO 8859-10, ECMA 144СкандинавскийДаДа1ISO885910
LATIN7ISO 8859-13БалтийскийДаДа1ISO885913
LATIN8ISO 8859-14КельтскийДаДа1ISO885914
LATIN9ISO 8859-15LATIN1 с символом евро и диакритическими знакамиДаДа1ISO885915
LATIN10ISO 8859-16, ASRO SR 14111РумынскийДаНет1ISO885916
MULE_INTERNALВнутренний код MuleMultilingual EmacsДаНет1–4 
SJISShift JISЯпонскийНетНет1–2Mskanji, ShiftJIS, WIN932, Windows932
SHIFT_JIS_2004Shift JIS, JIS X 0213ЯпонскийНетНет1–2 
SQL_ASCIIне определено (см. текст)любаяДаНет1 
UHCUnified Hangul CodeКорейскийНетНет1–2WIN949, Windows949
UTF8Юникод, 8 битallДаДа1–4Юникод
WIN866Windows CP866КириллицаДаДа1ALT
WIN874Windows CP874ТайскийДаНет1 
WIN1250Windows CP1250ЦентральноевропейскаяДаДа1 
WIN1251Windows CP1251КириллицаДаДа1WIN
WIN1252Windows CP1252ЗападноевропейскаяДаДа1 
WIN1253Windows CP1253греческий языкДаДа1 
WIN1254Windows CP1254ТурецкийДаДа1 
WIN1255Windows CP1255ИвритДаДа1 
WIN1256Windows CP1256Арабский языкДаДа1 
WIN1257Windows CP1257БалтийскийДаДа1 
WIN1258Windows CP1258Вьетнамский языкДаДа1ABC, TCVN, TCVN5712, VSCII

Не все клиентские APIподдерживают все перечисленные кодировки. Например, Digital Q.DataBase драйвер JDBC не поддерживает MULE_INTERNAL, LATIN6, LATIN8и LATIN10.

Параметр SQL_ASCII работает значительно иначе, чем другие настройки. Когда кодировка сервера установлена как SQL_ASCII, сервер интерпретирует значения байтов 0–127 в соответствии со стандартом ASCII, тогда как значения 128–255 воспринимаются как неинтерпретируемые символы. Преобразование кодировки не будет выполняться, если выбран параметр SQL_ASCII. Таким образом, эта настройка является не столько объявлением использования конкретной кодировки, сколько декларацией отсутствия сведений о ней. В большинстве случаев при работе с любыми данными, отличными от ASCII, не рекомендуется использовать параметр SQL_ASCII поскольку Digital Q.DataBase не сможет обеспечить преобразование или валидацию символов, не входящих в набор ASCII.

3.8.3.2. Настройка кодировки #

initdb определяет кодировку по умолчанию (набор символов) для Digital Q.DataBase кластера. Например,

initdb -E EUC_JP

устанавливает кодировку по умолчанию EUC_JP (Extended Unix Code для японского языка). Вы можете использовать параметр --encoding вместо -E если предпочитаете полные имена параметров. Если параметр -E или --encoding указан параметр, initdb пытается определить подходящую кодировку на основе указанной или используемой по умолчанию локали.

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

createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean

Будет создана база данных с именем korean использующая кодировку EUC_KR, а также локаль ko_KR. Другой способ выполнить эту операцию — использовать следующую SQL-команду:

CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;

Обратите внимание, что приведенные выше команды указывают на копирование базы данных template0 database. При копировании любой другой базы данных параметры кодировки и локали не могут отличаться от настроек исходной базы данных, так как это может привести к повреждению данных. Для получения дополнительной информации см. Раздел 3.7.3.

Кодировка базы данных хранится в системном каталоге pg_database. Ее можно просмотреть, используя параметр psql -l или команду \l command.

$ psql -l
                                         Список баз данных
   Имя    |  Владелец   | Кодировка  |  Правила сортировки  |    Тип символов    |          Права доступа
-----------+----------+-----------+-------------+-------------+-------------------------------------
 clocaledb | hlinnaka | SQL_ASCII | C           | C           |
 englishdb | hlinnaka | UTF8      | en_GB.UTF8  | en_GB.UTF8  |
 japanese  | hlinnaka | UTF8      | ja_JP.UTF8  | ja_JP.UTF8  |
 korean    | hlinnaka | EUC_KR    | ko_KR.euckr | ko_KR.euckr |
 postgres  | hlinnaka | UTF8      | fi_FI.UTF8  | fi_FI.UTF8  |
 template0 | hlinnaka | UTF8      | fi_FI.UTF8  | fi_FI.UTF8  | {=c/hlinnaka,hlinnaka=CTc/hlinnaka}
 template1 | hlinnaka | UTF8      | fi_FI.UTF8  | fi_FI.UTF8  | {=c/hlinnaka,hlinnaka=CTc/hlinnaka}
(7 строк)

Важно

В большинстве современных операционных систем Digital Q.DataBase может определить, какая кодировка подразумевается параметром LC_CTYPE и обеспечит использование только соответствующей кодировки базы данных. В устаревших системах пользователь несет ответственность за использование кодировки, соответствующей выбранной локали. Ошибка в этом аспекте может привести к некорректному выполнению операций, зависящих от локали, таких как сортировка.

Digital Q.DataBase позволит суперпользователям создавать базы данных с SQL_ASCII кодировкой, даже если LC_CTYPE не является C или POSIX. Как указано выше, SQL_ASCII не гарантирует, что данные, хранящиеся в базе данных, используют определенную кодировку, поэтому такой выбор сопряжен с риском некорректной работы функций, зависящих от локали. Использование такой комбинации настроек не рекомендуется и в будущем может быть полностью запрещено.

3.8.3.3. Автоматическое преобразование кодировок между сервером и клиентом #

Digital Q.DataBase поддерживает автоматическое преобразование наборов символов между сервером и клиентом для многих комбинаций кодировок (Раздел 3.8.3.4 показывает, каких именно).

Чтобы включить автоматическое преобразование кодировок, необходимо указать Digital Q.DataBase кодировку (encoding), которую требуется использовать на стороне клиента. Существует несколько способов реализации данной задачи:

  • Использование \encoding команды в psql. \encoding позволяет изменять клиентскую кодировку динамически. Например, для смены кодировки на SJIS, введите:

    \encoding SJIS
    

  • libpq (Раздел 4.1.11) содержит функции для управления клиентской кодировкой.

  • Использование SET client_encoding TO. Установка клиентской кодировки может быть выполнена с помощью следующей SQL-команды:

    SET CLIENT_ENCODING TO '«ключ-значение»';
    

    Также можно использовать стандартный синтаксис SQL SET NAMES для этой цели:

    SET NAMES '«ключ-значение»';
    

    Для получения текущей кодировки клиента:

    SHOW client_encoding;
    

    Для возврата к кодировке по умолчанию:

    RESET client_encoding;
    

  • Использование PGCLIENTENCODING. Если переменная окружения PGCLIENTENCODING определена в окружении клиента, эта клиентская кодировка выбирается автоматически при установке соединения с сервером. (Впоследствии это значение может быть переопределено любым из других методов, упомянутых выше.)

  • С помощью переменной конфигурации client_encoding. Если эта client_encoding переменная установлена, данная клиентская кодировка выбирается автоматически при установке соединения с сервер создан. (В дальнейшем это значение можно переопределить с помощью любого из других методов, упомянутых выше.)

Если преобразование конкретного символа невозможно — например, если выбрана кодировка EUC_JP для сервера и LATIN1 для клиента, при этом возвращаются некоторые японские символы, для которых отсутствует представление в LATIN1 — будет выдана ошибка.

Если кодировка клиента определена как SQL_ASCII, преобразование кодировок отключается независимо от кодировки сервера. (Однако, если кодировка сервера не SQL_ASCII, сервер все равно будет проверять, что входящие данные корректны для этой кодировки; таким образом, итоговый результат будет аналогичен случаю, когда кодировка клиента совпадает с кодировкой сервера.) Как и для сервера, использование SQL_ASCII не рекомендуется, за исключением случаев работы исключительно с данными в кодировке ASCII.

3.8.3.4. Доступные преобразования кодировок #

Digital Q.DataBase позволяет выполнять преобразование между любыми двумя кодировками, для которых функция преобразования указана в pg_conversion системный каталог. Digital Q.DataBase поставляется с рядом предопределенных преобразований, краткая информация о которых приведена в Таблица 3.8.4 и более подробно описана в Таблица 3.8.5. Для создания нового преобразования используйте SQL-команду CREATE CONVERSION. (Для автоматического использования при клиент-серверных преобразованиях оно должно быть помечено как «правила сортировки по умолчанию» для данной пары кодировок.)

Таблица 3.8.4. Встроенные клиент-серверные преобразования кодировок

Кодировка сервераДоступные кодировки клиента
BIG5не поддерживается в качестве серверной кодировки
EUC_CNEUC_CN, MULE_INTERNAL, UTF8
EUC_JPEUC_JP, MULE_INTERNAL, SJIS, UTF8
EUC_JIS_2004EUC_JIS_2004, SHIFT_JIS_2004, UTF8
EUC_KREUC_KR, MULE_INTERNAL, UTF8
EUC_TWEUC_TW, BIG5, MULE_INTERNAL, UTF8
GB18030не поддерживается в качестве серверной кодировки
GBKне поддерживается в качестве серверной кодировки
ISO_8859_5ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866, WIN1251
ISO_8859_6ISO_8859_6, UTF8
ISO_8859_7ISO_8859_7, UTF8
ISO_8859_8ISO_8859_8, UTF8
JOHABне поддерживается в качестве серверной кодировки
KOI8RKOI8R, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251
KOI8UKOI8U, UTF8
LATIN1LATIN1, MULE_INTERNAL, UTF8
LATIN2LATIN2, MULE_INTERNAL, UTF8, WIN1250
LATIN3LATIN3, MULE_INTERNAL, UTF8
LATIN4LATIN4, MULE_INTERNAL, UTF8
LATIN5LATIN5, UTF8
LATIN6LATIN6, UTF8
LATIN7LATIN7, UTF8
LATIN8LATIN8, UTF8
LATIN9LATIN9, UTF8
LATIN10LATIN10, UTF8
MULE_INTERNALMULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8R, LATIN1 в команде LATIN4, SJIS, WIN866, WIN1250, WIN1251
SJISне поддерживается в качестве серверной кодировки
SHIFT_JIS_2004не поддерживается в качестве серверной кодировки
SQL_ASCIIany (преобразование не выполняется)
UHCне поддерживается в качестве серверной кодировки
UTF8все поддерживаемые кодировки
WIN866WIN866, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN1251
WIN874WIN874, UTF8
WIN1250WIN1250, LATIN2, MULE_INTERNAL, UTF8
WIN1251WIN1251, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866
WIN1252WIN1252, UTF8
WIN1253WIN1253, UTF8
WIN1254WIN1254, UTF8
WIN1255WIN1255, UTF8
WIN1256WIN1256, UTF8
WIN1257WIN1257, UTF8
WIN1258WIN1258, UTF8

Таблица 3.8.5. Все встроенные преобразования кодировок

Имя преобразования [a] Исходная кодировкаЦелевая кодировка
big5_to_euc_twBIG5EUC_TW
big5_to_micBIG5MULE_INTERNAL
big5_to_utf8BIG5UTF8
euc_cn_to_micEUC_CNMULE_INTERNAL
euc_cn_to_utf8EUC_CNUTF8
euc_jp_to_micEUC_JPMULE_INTERNAL
euc_jp_to_sjisEUC_JPSJIS
euc_jp_to_utf8EUC_JPUTF8
euc_kr_to_micEUC_KRMULE_INTERNAL
euc_kr_to_utf8EUC_KRUTF8
euc_tw_to_big5EUC_TWBIG5
euc_tw_to_micEUC_TWMULE_INTERNAL
euc_tw_to_utf8EUC_TWUTF8
gb18030_to_utf8GB18030UTF8
gbk_to_utf8GBKUTF8
iso_8859_10_to_utf8LATIN6UTF8
iso_8859_13_to_utf8LATIN7UTF8
iso_8859_14_to_utf8LATIN8UTF8
iso_8859_15_to_utf8LATIN9UTF8
iso_8859_16_to_utf8LATIN10UTF8
iso_8859_1_to_micLATIN1MULE_INTERNAL
iso_8859_1_to_utf8LATIN1UTF8
iso_8859_2_to_micLATIN2MULE_INTERNAL
iso_8859_2_to_utf8LATIN2UTF8
iso_8859_2_to_windows_1250LATIN2WIN1250
iso_8859_3_to_micLATIN3MULE_INTERNAL
iso_8859_3_to_utf8LATIN3UTF8
iso_8859_4_to_micLATIN4MULE_INTERNAL
iso_8859_4_to_utf8LATIN4UTF8
iso_8859_5_to_koi8_rISO_8859_5KOI8R
iso_8859_5_to_micISO_8859_5MULE_INTERNAL
iso_8859_5_to_utf8ISO_8859_5UTF8
iso_8859_5_to_windows_1251ISO_8859_5WIN1251
iso_8859_5_to_windows_866ISO_8859_5WIN866
iso_8859_6_to_utf8ISO_8859_6UTF8
iso_8859_7_to_utf8ISO_8859_7UTF8
iso_8859_8_to_utf8ISO_8859_8UTF8
iso_8859_9_to_utf8LATIN5UTF8
johab_to_utf8JOHABUTF8
koi8_r_to_iso_8859_5KOI8RISO_8859_5
koi8_r_to_micKOI8RMULE_INTERNAL
koi8_r_to_utf8KOI8RUTF8
koi8_r_to_windows_1251KOI8RWIN1251
koi8_r_to_windows_866KOI8RWIN866
koi8_u_to_utf8KOI8UUTF8
mic_to_big5MULE_INTERNALBIG5
mic_to_euc_cnMULE_INTERNALEUC_CN
mic_to_euc_jpMULE_INTERNALEUC_JP
mic_to_euc_krMULE_INTERNALEUC_KR
mic_to_euc_twMULE_INTERNALEUC_TW
mic_to_iso_8859_1MULE_INTERNALLATIN1
mic_to_iso_8859_2MULE_INTERNALLATIN2
mic_to_iso_8859_3MULE_INTERNALLATIN3
mic_to_iso_8859_4MULE_INTERNALLATIN4
mic_to_iso_8859_5MULE_INTERNALISO_8859_5
mic_to_koi8_rMULE_INTERNALKOI8R
mic_to_sjisMULE_INTERNALSJIS
mic_to_windows_1250MULE_INTERNALWIN1250
mic_to_windows_1251MULE_INTERNALWIN1251
mic_to_windows_866MULE_INTERNALWIN866
sjis_to_euc_jpSJISEUC_JP
sjis_to_micSJISMULE_INTERNAL
sjis_to_utf8SJISUTF8
windows_1258_to_utf8WIN1258UTF8
uhc_to_utf8UHCUTF8
utf8_to_big5UTF8BIG5
utf8_to_euc_cnUTF8EUC_CN
utf8_to_euc_jpUTF8EUC_JP
utf8_to_euc_krUTF8EUC_KR
utf8_to_euc_twUTF8EUC_TW
utf8_to_gb18030UTF8GB18030
utf8_to_gbkUTF8GBK
utf8_to_iso_8859_1UTF8LATIN1
utf8_to_iso_8859_10UTF8LATIN6
utf8_to_iso_8859_13UTF8LATIN7
utf8_to_iso_8859_14UTF8LATIN8
utf8_to_iso_8859_15UTF8LATIN9
utf8_to_iso_8859_16UTF8LATIN10
utf8_to_iso_8859_2UTF8LATIN2
utf8_to_iso_8859_3UTF8LATIN3
utf8_to_iso_8859_4UTF8LATIN4
utf8_to_iso_8859_5UTF8ISO_8859_5
utf8_to_iso_8859_6UTF8ISO_8859_6
utf8_to_iso_8859_7UTF8ISO_8859_7
utf8_to_iso_8859_8UTF8ISO_8859_8
utf8_to_iso_8859_9UTF8LATIN5
utf8_to_johabUTF8JOHAB
utf8_to_koi8_rUTF8KOI8R
utf8_to_koi8_uUTF8KOI8U
utf8_to_sjisUTF8SJIS
utf8_to_windows_1258UTF8WIN1258
utf8_to_uhcUTF8UHC
utf8_to_windows_1250UTF8WIN1250
utf8_to_windows_1251UTF8WIN1251
utf8_to_windows_1252UTF8WIN1252
utf8_to_windows_1253UTF8WIN1253
utf8_to_windows_1254UTF8WIN1254
utf8_to_windows_1255UTF8WIN1255
utf8_to_windows_1256UTF8WIN1256
utf8_to_windows_1257UTF8WIN1257
utf8_to_windows_866UTF8WIN866
utf8_to_windows_874UTF8WIN874
windows_1250_to_iso_8859_2WIN1250LATIN2
windows_1250_to_micWIN1250MULE_INTERNAL
windows_1250_to_utf8WIN1250UTF8
windows_1251_to_iso_8859_5WIN1251ISO_8859_5
windows_1251_to_koi8_rWIN1251KOI8R
windows_1251_to_micWIN1251MULE_INTERNAL
windows_1251_to_utf8WIN1251UTF8
windows_1251_to_windows_866WIN1251WIN866
windows_1252_to_utf8WIN1252UTF8
windows_1256_to_utf8WIN1256UTF8
windows_866_to_iso_8859_5WIN866ISO_8859_5
windows_866_to_koi8_rWIN866KOI8R
windows_866_to_micWIN866MULE_INTERNAL
windows_866_to_utf8WIN866UTF8
windows_866_to_windows_1251WIN866WIN
windows_874_to_utf8WIN874UTF8
euc_jis_2004_to_utf8EUC_JIS_2004UTF8
utf8_to_euc_jis_2004UTF8EUC_JIS_2004
shift_jis_2004_to_utf8SHIFT_JIS_2004UTF8
utf8_to_shift_jis_2004UTF8SHIFT_JIS_2004
euc_jis_2004_to_shift_jis_2004EUC_JIS_2004SHIFT_JIS_2004
shift_jis_2004_to_euc_jis_2004SHIFT_JIS_2004EUC_JIS_2004

[a] Имена преобразований следуют стандартной схеме именования: официальное название исходной кодировки, в котором все не буквенно-цифровые символы заменены подчеркиваниями, за которыми следует _to_, за которым следует обработанное аналогичным образом имя целевой кодировки. Поэтому данные имена иногда отличаются от стандартных названий кодировок, приведенных в Таблица 3.8.3.


3.8.3.5. Дополнительная литература #

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

CJKV Information Processing: Chinese, Japanese, Korean & Vietnamese Computing

Содержит подробные описания EUC_JP, EUC_CN, EUC_KR, EUC_TW.

https://www.unicode.org/

Веб-сайт Консорциума Юникода (Unicode Consortium).

RFC 3629

UTF-8 (8-битный формат преобразования UCS/Юникода) определен в данном документе.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению