PostgreSQL : Документация: 13: 23.3. Поддержка кодировок : Компания Postgres Professional
23.3. Поддержка кодировок
Поддержка кодировок в PostgreSQL позволяет хранить текст в различных кодировках, включая однобайтовые кодировки, такие как входящие в семейство ISO 8859 и многобайтовые кодировки, такие как EUC (Extended Unix Code), UTF-8 и внутренний код Mule. Все поддерживаемые кодировки могут прозрачно использоваться клиентами, но некоторые не поддерживаются сервером (в качестве серверной кодировки). Кодировка по умолчанию выбирается при инициализации кластера базы данных PostgreSQL при помощи initdb
. Она может быть переопределена при создании базы данных, что позволяет иметь несколько баз данных с разными кодировками.
Важным ограничением, однако, является то, что кодировка каждой базы данных должна быть совместима с параметрами локали базы данных LC_CTYPE
(классификация символов) и LC_COLLATE
(порядок сортировки строк). Для локали C
или POSIX
подойдёт любой набор символов, но для других локалей, предоставляемых библиотекой libc, есть только один набор символов, который будет работать правильно. (Однако в среде Windows кодировка UTF-8 может использоваться с любой локалью.) Если у вас включена поддержка ICU, локали, предоставляемые библиотекой ICU, можно использовать с большинством (но не всеми) кодировками на стороне сервера.
23.3.1. Поддерживаемые кодировки
Таблица 23.1 показывает кодировки, доступные для использования в PostgreSQL.
Таблица 23.1. Кодировки PostgreSQL
Имя | Описание | Язык | Поддержка на сервере | ICU? | Байт на символ | Псевдонимы |
---|---|---|---|---|---|---|
BIG5 | Big Five | Традиционные китайские иероглифы | Нет | Нет | 1–2 | WIN950 , Windows950 |
EUC_CN | Extended UNIX Code-CN | Упрощённые китайские иероглифы | Да | Да | 1–3 | |
EUC_JP | Extended UNIX Code-JP | Японский | Да | Да | 1–3 | |
EUC_JIS_2004 | Extended UNIX Code-JP, JIS X 0213 | Японский | Да | Нет | 1–3 | |
EUC_KR | Extended UNIX Code-KR | Корейский | Да | Да | 1–3 | |
EUC_TW | Extended UNIX Code-TW | Традиционные китайские иероглифы, тайваньский | Да | Да | 1–3 | |
GB18030 | Национальный стандарт | Китайский | Нет | Нет | 1–4 | |
GBK | Расширенный национальный стандарт | Упрощённые китайские иероглифы | Нет | Нет | 1–2 | WIN936 , Windows936 |
ISO_8859_5 | ISO 8859-5, ECMA 113 | Латинский/Кириллица | Да | Да | 1 | |
ISO_8859_6 | ISO 8859-6, ECMA 114 | Латинский/Арабский | Да | Да | 1 | |
ISO_8859_7 | ISO 8859-7, ECMA 118 | Латинский/Греческий | Да | Да | 1 | |
ISO_8859_8 | ISO 8859-8, ECMA 121 | Латинский/Иврит | Да | Да | 1 | |
JOHAB | JOHAB | Корейский (Хангыль) | Нет | Нет | 1–3 | |
KOI8R | KOI8-R | Кириллица (Русский) | Да | Да | 1 | KOI8 |
KOI8U | KOI8-U | Кириллица (Украинский) | Да | Да | 1 | |
LATIN1 | ISO 8859-1, ECMA 94 | Западноевропейские | Да | Да | 1 | ISO88591 |
LATIN2 | ISO 8859-2, ECMA 94 | Центральноевропейские | Да | Да | 1 | ISO88592 |
LATIN3 | ISO 8859-3, ECMA 94 | Южноевропейские | Да | Да | 1 | ISO88593 |
LATIN4 | ISO 8859-4, ECMA 94 | Североевропейские | Да | Да | 1 | ISO88594 |
LATIN5 | ISO 8859-9, ECMA 128 | Турецкий | Да | Да | 1 | ISO88599 |
LATIN6 | ISO 8859-10, ECMA 144 | Скандинавские | Да | Да | 1 | ISO885910 |
LATIN7 | ISO 8859-13 | Балтийские | Да | Да | 1 | ISO885913 |
LATIN8 | ISO 8859-14 | Кельтские | Да | Да | 1 | ISO885914 |
LATIN9 | ISO 8859-15 | LATIN1 c европейскими языками и диалектами | Да | Да | 1 | ISO885915 |
LATIN10 | ISO 8859-16, ASRO SR 14111 | Румынский | Да | Нет | 1 | ISO885916 |
MULE_INTERNAL | Внутренний код Mule | Мультиязычный редактор Emacs | Да | Нет | 1–4 | |
SJIS | Shift JIS | Японский | Нет | Нет | 1–2 | Mskanji , ShiftJIS , WIN932 , Windows932 |
SHIFT_JIS_2004 | Shift JIS, JIS X 0213 | Японский | Нет | Нет | 1–2 | |
SQL_ASCII | не указан (см. текст) | any | Да | Нет | 1 | |
UHC | Унифицированный код Хангыль | Корейский | Нет | Нет | 1–2 | WIN949 , Windows949 |
UTF8 | Unicode, 8-bit | все | Да | Да | 1–4 | Unicode |
WIN866 | Windows CP866 | Кириллица | Да | Да | 1 | ALT |
WIN874 | Windows CP874 | Тайский | Да | Нет | 1 | |
WIN1250 | Windows CP1250 | Центральноевропейские | Да | Да | 1 | |
WIN1251 | Windows CP1251 | Кириллица | Да | Да | 1 | WIN |
WIN1252 | Windows CP1252 | Западноевропейские | Да | Да | 1 | |
WIN1253 | Windows CP1253 | Греческий | Да | Да | 1 | |
WIN1254 | Windows CP1254 | Турецкий | Да | Да | 1 | |
WIN1255 | Windows CP1255 | Иврит | Да | Да | 1 | |
WIN1256 | Windows CP1256 | Арабский | Да | Да | 1 | |
WIN1257 | Windows CP1257 | Балтийские | Да | Да | 1 | |
WIN1258 | Windows CP1258 | Вьетнамский | Да | Да | 1 | ABC , TCVN , TCVN5712 , VSCII |
Не все клиентские API поддерживают все перечисленные кодировки. Например, драйвер интерфейса JDBC PostgreSQL не поддерживает MULE_INTERNAL
, LATIN6
, LATIN8
и LATIN10
.
Поведение кодировки SQL_ASCII
существенно отличается от других. Когда набором символов сервера является SQL_ASCII
, сервер интерпретирует байтовые значения 0–127 согласно кодировке ASCII, тогда как значения 128–255 воспринимаются как незначимые. Перекодировка не будет выполнена при выборе SQL_ASCII
. Таким образом, этот вариант является не столько объявлением того, что используется определённая кодировка, сколько объявлением того, что кодировка игнорируется. В большинстве случаев, если вы работаете с любыми данными, отличными от ASCII, не стоит использовать SQL_ASCII
, так как PostgreSQL не сможет преобразовать или проверить символы, отличные от ASCII.
23.3.2. Настройка кодировки
initdb
определяет кодировку по умолчанию для кластера PostgreSQL. Например,
initdb -E EUC_JP
настраивает кодировку по умолчанию на EUC_JP
(Расширенная система кодирования для японского языка). Можно использовать --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
и локаль
. Также, получить желаемый результат можно с помощью данной SQL-команды:
CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;
Заметьте, что приведённые выше команды задают копирование базы данных template0
. При копировании любой другой базы данных, параметры локали и кодировку исходной базы изменить нельзя, так как это может привести к искажению данных. Более подробное описание приведено в Разделе 22.3.
Кодировка базы данных хранится в системном каталоге pg_database
. Её можно увидеть при помощи параметра psql
-l
или команды \l
.$psql -l
List of databases Name | Owner | Encoding | Collation | Ctype | Access Privileges -----------+----------+-----------+-------------+-------------+------------------------------------- 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 rows)
Важно
На большинстве современных операционных систем PostgreSQL может определить, какая кодировка подразумевается параметром LC_CTYPE
, что обеспечит использование только соответствующей кодировки базы данных. На более старых системах необходимо самостоятельно следить за тем, чтобы использовалась кодировка, соответствующая выбранной языковой среде. Ошибка в этой области, скорее всего, приведёт к странному поведению зависимых от локали операций, таких как сортировка.
PostgreSQL позволит суперпользователям создавать базы данных с кодировкой SQL_ASCII
, даже когда значение LC_CTYPE
не установлено в C
или POSIX
. Как было сказано выше, SQL_ASCII
не гарантирует, что данные, хранящиеся в базе, имеют определённую кодировку, и таким образом, этот выбор чреват сбоями, связанными с локалью. Использование данной комбинации устарело и, возможно, будет полностью запрещено.
23.3.3. Автоматическая перекодировка между сервером и клиентом
PostgreSQL поддерживает автоматическое перекодирование символов между сервером и клиентов для многих сочетаний кодировок (они перечисляются в Подразделе 23.3.4).
Чтобы включить автоматическую перекодировку символов, необходимо сообщить PostgreSQL кодировку, которую вы хотели бы использовать на стороне клиента. Это можно выполнить несколькими способами:
Использование команды
\encoding
в psql.\encoding
позволяет оперативно изменять клиентскую кодировку. Например, чтобы изменить кодировку наSJIS
, введите:\encoding SJIS
libpq (Раздел 33.10) имеет функции, для управления клиентской кодировкой.
Использование
SET client_encoding TO
. Клиентская кодировка устанавливается следующей SQL-командой:SET CLIENT_ENCODING TO '
value
';Также, для этой цели можно использовать стандартный синтаксис SQL
SET NAMES
:SET NAMES '
value
';Получить текущую клиентскую кодировку:
SHOW client_encoding;
Вернуть кодировку по умолчанию:
RESET client_encoding;
Использование
PGCLIENTENCODING
. Если установлена переменная окруженияPGCLIENTENCODING
, то эта клиентская кодировка выбирается автоматически при подключении к серверу. (В дальнейшем это может быть переопределено при помощи любого из методов, указанных выше.)Использование переменной конфигурации client_encoding. Если задана переменная
client_encoding
, указанная клиентская кодировка выбирается автоматически при подключении к серверу. (В дальнейшем это может быть переопределено при помощи любого из методов, указанных выше.)
Если перекодировка определённого символа невозможна (предположим, выбраны EUC_JP
для сервера и LATIN1
для клиента, и передаются некоторые японские иероглифы, не представленные в LATIN1
), возникает ошибка.
Если клиентская кодировка определена как SQL_ASCII
, перекодировка отключается вне зависимости от кодировки сервера. (Однако если серверная кодировка отлична от SQL_ASCII
, сервер будет тем не менее проверять, что входящие данные являются допустимыми для его кодировки; поэтому итоговый результат будет тем же, что и при совпадении клиентской кодировки с серверной. ) На сервере же использовать кодировку SQL_ASCII
неразумно, кроме случаев, когда все ваши данные полностью вписываются в ASCII.
23.3.4. Возможные перекодировки наборов символов
PostgreSQL поддерживает перекодирование между любыми двумя наборами символов, для которых в системном каталоге pg_conversion
присутствует функция перекодирования. PostgreSQL включает несколько предопределённых перекодировок, сведённых в Таблице 23.2 и описанных подробнее в Таблице 23.3. Кроме этого, есть возможность создать новую перекодировку, используя SQL-команду CREATE CONVERSION. (Чтобы она использовалась для автоматического перекодирования текста между сервером и клиентом, она должна быть помечена как перекодировка «по умолчанию» для своей пары кодировок.)
Таблица 23.2. Встроенные клиент-серверные перекодировки наборов символов
Серверная кодировка | Доступные клиентские кодировки |
---|---|
BIG5 | не поддерживается как серверная кодировка |
EUC_CN | EUC_CN, MULE_INTERNAL , UTF8 |
EUC_JP | EUC_JP, MULE_INTERNAL , SJIS , UTF8 |
EUC_JIS_2004 | EUC_JIS_2004, SHIFT_JIS_2004 , UTF8 |
EUC_KR | EUC_KR, MULE_INTERNAL , UTF8 |
EUC_TW | EUC_TW, BIG5 , MULE_INTERNAL , UTF8 |
GB18030 | не поддерживается как серверная кодировка |
GBK | не поддерживается как серверная кодировка |
ISO_8859_5 | ISO_8859_5, KOI8R , MULE_INTERNAL , UTF8 , WIN866 , WIN1251 |
ISO_8859_6 | ISO_8859_6, UTF8 |
ISO_8859_7 | ISO_8859_7, UTF8 |
ISO_8859_8 | ISO_8859_8, UTF8 |
JOHAB | не поддерживается как серверная кодировка |
KOI8R | KOI8R, ISO_8859_5 , MULE_INTERNAL , UTF8 , WIN866 , WIN1251 |
KOI8U | KOI8U, UTF8 |
LATIN1 | LATIN1, MULE_INTERNAL , UTF8 |
LATIN2 | LATIN2, MULE_INTERNAL , UTF8 , WIN1250 |
LATIN3 | LATIN3, MULE_INTERNAL , UTF8 |
LATIN4 | LATIN4, MULE_INTERNAL , UTF8 |
LATIN5 | LATIN5, UTF8 |
LATIN6 | LATIN6, UTF8 |
LATIN7 | LATIN7, UTF8 |
LATIN8 | LATIN8, UTF8 |
LATIN9 | LATIN9, UTF8 |
LATIN10 | LATIN10, UTF8 |
MULE_INTERNAL | MULE_INTERNAL, BIG5 , EUC_CN , EUC_JP , EUC_KR , EUC_TW , ISO_8859_5 , KOI8R , LATIN1 to LATIN4 , SJIS , WIN866 , WIN1250 , WIN1251 |
SJIS | не поддерживается как серверная кодировка |
SHIFT_JIS_2004 | не поддерживается как серверная кодировка |
SQL_ASCII | любая (перекодировка не будет выполнена) |
UHC | не поддерживается как серверная кодировка |
UTF8 | все поддерживаемые кодировки |
WIN866 | WIN866, ISO_8859_5 , KOI8R , MULE_INTERNAL , UTF8 , WIN1251 |
WIN874 | WIN874, UTF8 |
WIN1250 | WIN1250, LATIN2 , MULE_INTERNAL , UTF8 |
WIN1251 | WIN1251, ISO_8859_5 , KOI8R , MULE_INTERNAL , UTF8 , WIN866 |
WIN1252 | WIN1252, UTF8 |
WIN1253 | WIN1253, UTF8 |
WIN1254 | WIN1254, UTF8 |
WIN1255 | WIN1255, UTF8 |
WIN1256 | WIN1256, UTF8 |
WIN1257 | WIN1257, UTF8 |
WIN1258 | WIN1258, UTF8 |
Таблица 23. 3. Все встроенные перекодировки наборов символов
Имя преобразования | Исходная кодировка | Целевая кодировка |
---|---|---|
big5_to_euc_tw | BIG5 | EUC_TW |
big5_to_mic | BIG5 | MULE_INTERNAL |
big5_to_utf8 | BIG5 | UTF8 |
euc_cn_to_mic | EUC_CN | MULE_INTERNAL |
euc_cn_to_utf8 | EUC_CN | UTF8 |
euc_jp_to_mic | EUC_JP | MULE_INTERNAL |
euc_jp_to_sjis | EUC_JP | SJIS |
euc_jp_to_utf8 | EUC_JP | UTF8 |
euc_kr_to_mic | EUC_KR | MULE_INTERNAL |
euc_kr_to_utf8 | EUC_KR | UTF8 |
euc_tw_to_big5 | EUC_TW | BIG5 |
euc_tw_to_mic | EUC_TW | MULE_INTERNAL |
euc_tw_to_utf8 | EUC_TW | UTF8 |
gb18030_to_utf8 | GB18030 | UTF8 |
gbk_to_utf8 | GBK | UTF8 |
iso_8859_10_to_utf8 | LATIN6 | UTF8 |
iso_8859_13_to_utf8 | LATIN7 | UTF8 |
iso_8859_14_to_utf8 | LATIN8 | UTF8 |
iso_8859_15_to_utf8 | LATIN9 | UTF8 |
iso_8859_16_to_utf8 | LATIN10 | UTF8 |
iso_8859_1_to_mic | LATIN1 | MULE_INTERNAL |
iso_8859_1_to_utf8 | LATIN1 | UTF8 |
iso_8859_2_to_mic | LATIN2 | MULE_INTERNAL |
iso_8859_2_to_utf8 | LATIN2 | UTF8 |
iso_8859_2_to_windows_1250 | LATIN2 | WIN1250 |
iso_8859_3_to_mic | LATIN3 | MULE_INTERNAL |
iso_8859_3_to_utf8 | LATIN3 | UTF8 |
iso_8859_4_to_mic | LATIN4 | MULE_INTERNAL |
iso_8859_4_to_utf8 | LATIN4 | UTF8 |
iso_8859_5_to_koi8_r | ISO_8859_5 | KOI8R |
iso_8859_5_to_mic | ISO_8859_5 | MULE_INTERNAL |
iso_8859_5_to_utf8 | ISO_8859_5 | UTF8 |
iso_8859_5_to_windows_1251 | ISO_8859_5 | WIN1251 |
iso_8859_5_to_windows_866 | ISO_8859_5 | WIN866 |
iso_8859_6_to_utf8 | ISO_8859_6 | UTF8 |
iso_8859_7_to_utf8 | ISO_8859_7 | UTF8 |
iso_8859_8_to_utf8 | ISO_8859_8 | UTF8 |
iso_8859_9_to_utf8 | LATIN5 | UTF8 |
johab_to_utf8 | JOHAB | UTF8 |
koi8_r_to_iso_8859_5 | KOI8R | ISO_8859_5 |
koi8_r_to_mic | KOI8R | MULE_INTERNAL |
koi8_r_to_utf8 | KOI8R | UTF8 |
koi8_r_to_windows_1251 | KOI8R | WIN1251 |
koi8_r_to_windows_866 | KOI8R | WIN866 |
koi8_u_to_utf8 | KOI8U | UTF8 |
mic_to_big5 | MULE_INTERNAL | BIG5 |
mic_to_euc_cn | MULE_INTERNAL | EUC_CN |
mic_to_euc_jp | MULE_INTERNAL | EUC_JP |
mic_to_euc_kr | MULE_INTERNAL | EUC_KR |
mic_to_euc_tw | MULE_INTERNAL | EUC_TW |
mic_to_iso_8859_1 | MULE_INTERNAL | LATIN1 |
mic_to_iso_8859_2 | MULE_INTERNAL | LATIN2 |
mic_to_iso_8859_3 | MULE_INTERNAL | LATIN3 |
mic_to_iso_8859_4 | MULE_INTERNAL | LATIN4 |
mic_to_iso_8859_5 | MULE_INTERNAL | ISO_8859_5 |
mic_to_koi8_r | MULE_INTERNAL | KOI8R |
mic_to_sjis | MULE_INTERNAL | SJIS |
mic_to_windows_1250 | MULE_INTERNAL | WIN1250 |
mic_to_windows_1251 | MULE_INTERNAL | WIN1251 |
mic_to_windows_866 | MULE_INTERNAL | WIN866 |
sjis_to_euc_jp | SJIS | EUC_JP |
sjis_to_mic | SJIS | MULE_INTERNAL |
sjis_to_utf8 | SJIS | UTF8 |
windows_1258_to_utf8 | WIN1258 | UTF8 |
uhc_to_utf8 | UHC | UTF8 |
utf8_to_big5 | UTF8 | BIG5 |
utf8_to_euc_cn | UTF8 | EUC_CN |
utf8_to_euc_jp | UTF8 | EUC_JP |
utf8_to_euc_kr | UTF8 | EUC_KR |
utf8_to_euc_tw | UTF8 | EUC_TW |
utf8_to_gb18030 | UTF8 | GB18030 |
utf8_to_gbk | UTF8 | GBK |
utf8_to_iso_8859_1 | UTF8 | LATIN1 |
utf8_to_iso_8859_10 | UTF8 | LATIN6 |
utf8_to_iso_8859_13 | UTF8 | LATIN7 |
utf8_to_iso_8859_14 | UTF8 | LATIN8 |
utf8_to_iso_8859_15 | UTF8 | LATIN9 |
utf8_to_iso_8859_16 | UTF8 | LATIN10 |
utf8_to_iso_8859_2 | UTF8 | LATIN2 |
utf8_to_iso_8859_3 | UTF8 | LATIN3 |
utf8_to_iso_8859_4 | UTF8 | LATIN4 |
utf8_to_iso_8859_5 | UTF8 | ISO_8859_5 |
utf8_to_iso_8859_6 | UTF8 | ISO_8859_6 |
utf8_to_iso_8859_7 | UTF8 | ISO_8859_7 |
utf8_to_iso_8859_8 | UTF8 | ISO_8859_8 |
utf8_to_iso_8859_9 | UTF8 | LATIN5 |
utf8_to_johab | UTF8 | JOHAB |
utf8_to_koi8_r | UTF8 | KOI8R |
utf8_to_koi8_u | UTF8 | KOI8U |
utf8_to_sjis | UTF8 | SJIS |
utf8_to_windows_1258 | UTF8 | WIN1258 |
utf8_to_uhc | UTF8 | UHC |
utf8_to_windows_1250 | UTF8 | WIN1250 |
utf8_to_windows_1251 | UTF8 | WIN1251 |
utf8_to_windows_1252 | UTF8 | WIN1252 |
utf8_to_windows_1253 | UTF8 | WIN1253 |
utf8_to_windows_1254 | UTF8 | WIN1254 |
utf8_to_windows_1255 | UTF8 | WIN1255 |
utf8_to_windows_1256 | UTF8 | WIN1256 |
utf8_to_windows_1257 | UTF8 | WIN1257 |
utf8_to_windows_866 | UTF8 | WIN866 |
utf8_to_windows_874 | UTF8 | WIN874 |
windows_1250_to_iso_8859_2 | WIN1250 | LATIN2 |
windows_1250_to_mic | WIN1250 | MULE_INTERNAL |
windows_1250_to_utf8 | WIN1250 | UTF8 |
windows_1251_to_iso_8859_5 | WIN1251 | ISO_8859_5 |
windows_1251_to_koi8_r | WIN1251 | KOI8R |
windows_1251_to_mic | WIN1251 | MULE_INTERNAL |
windows_1251_to_utf8 | WIN1251 | UTF8 |
windows_1251_to_windows_866 | WIN1251 | WIN866 |
windows_1252_to_utf8 | WIN1252 | UTF8 |
windows_1256_to_utf8 | WIN1256 | UTF8 |
windows_866_to_iso_8859_5 | WIN866 | ISO_8859_5 |
windows_866_to_koi8_r | WIN866 | KOI8R |
windows_866_to_mic | WIN866 | MULE_INTERNAL |
windows_866_to_utf8 | WIN866 | UTF8 |
windows_866_to_windows_1251 | WIN866 | WIN |
windows_874_to_utf8 | WIN874 | UTF8 |
euc_jis_2004_to_utf8 | EUC_JIS_2004 | UTF8 |
utf8_to_euc_jis_2004 | UTF8 | EUC_JIS_2004 |
shift_jis_2004_to_utf8 | SHIFT_JIS_2004 | UTF8 |
utf8_to_shift_jis_2004 | UTF8 | SHIFT_JIS_2004 |
euc_jis_2004_to_shift_jis_2004 | EUC_JIS_2004 | SHIFT_JIS_2004 |
shift_jis_2004_to_euc_jis_2004 | SHIFT_JIS_2004 | EUC_JIS_2004 |
23.
3.5. Дополнительные источники информацииРекомендуемые источники для начала изучения различных видов систем кодирования.
- Обработка информации на китайском, японском, корейском & вьетнамском языках.
Содержит подробные объяснения по
EUC_JP
,EUC_CN
,EUC_KR
,EUC_TW
.- https://www.unicode.org/
Сайт Unicode Consortium.
- RFC 3629
UTF-8 (формат преобразования 8-битного UCS/Unicode) определён здесь.
sql: преобразование из cp1251 в utf8
Как скомпилировать запрос SQL, который преобразует столбец таблицы из cp1251 в utf8 . Моя база данных и все таблицы в ней с кодировкой utf8, но информация внутри на cp1251. Из-за этого информация отображается некорректно. Простое изменение кодировки в настройках превращает их в другие непонятные символы. Я пытался изменить DEFAULT CHARESET
в дампе, но это тоже не помогло 🙁 может быть, есть другие методы?
Часть базы данных:
Я так и сделал:
- туздышпр -у mysql -п conference_db —позвольте-ключевые слова-создать-опции-в комплекте-вставка —default-character-set=utf8 по —add-drop-table > dump. sql
- Все … CHARESET по умолчанию=utf8 по умолчанию изменен на … CHARESET=кодировкой cp1251 (на создание таблицы)
- mysql -u mysql -p conference_db —default-character-set=cp1251 < dump.sql
mysql sql unicode converter character-set
Поделиться Источник Eugene Kotov 13 февраля 2018 в 20:51
2 ответа
- Преобразование между ISO-8559-1 и cp1251
Мое приложение Android использует библиотеку с открытым исходным кодом, которая принимает только текстовые данные в кодировке ISO-8859-1. У меня есть несколько пользователей из Восточной Европы, которые хотели бы ввести кодированный cp1251 текст. Это, по-видимому, является ограничением библиотеки…
- php: преобразование из cp1251 в utf8
У меня есть проблема с преобразованием строки из cp1251 в utf8.
0
Кодировка по умолчанию в таблице не имеет значения. Что имеет значение, так это кодировка в строковых столбцах.
Вернемся к оригиналу; я беспокоюсь, что неудачное преобразование только ухудшило ситуацию и затруднило ее распутывание.
Скриншот очень похож на «Mojibake». (Если вы можете вставить данные в свой вопрос, я могу проанализировать его дальше.) Смотрите
Для получения помощи в восстановлении данных, пожалуйста, предоставьте SHOW CREATE TABLE
и SELECT HEX(col) ...
, чтобы мы могли увидеть, что у вас есть. («колонка из cp1251» неоднозначна).
Поделиться Rick James 17 февраля 2018 в 02:48
0
Это трудно сделать с помощью операций дампа и восстановления.
Однако вы можете преобразовать набор символов столбца-нарушителя в оператор SELECT с помощью операции CONVERT : CONVERT(column USING utf8)
Например, если у вас есть новая пустая таблица с правильным набором символов в столбце, это скопирует старую таблицу в новую и выполнит преобразование.
INSERT INTO new_table
SELECT journal_id, locale, setting_name,
CONVERT(setting_value USING utf8) setting_value
setting_type
FROM table
Поделиться O. Jones 13 февраля 2018 в 22:15
Похожие вопросы:
Java: преобразование строки UTF8 в массив байтов в другой кодировке
У меня есть строка в кодировке UTF8, но мне нужно опубликовать параметры для процесса выполнения в cp1251. Как я могу декодировать строку или байтовый массив? Мне нужно что-то вроде:. bytesInCp1251…
Как преобразовать cp1251 в utf-8 программно в Java?
Возможный Дубликат : Преобразование кодировки в java На самом деле мне нужен пример, метод преобразования из кодировки cp1251 в utf-8 в Java. Например, у меня не болит голова в PHP с этим вопросом…
Преобразование файла из cp1251 в utf8
Я видел подобные вопросы, но ответы на них не помогли. Настоящий кодекс: with codecs.open( sourceFileName, r, sourceEncoding, ) as sourceFile: contents = sourceFile.read() with codecs.open(…
Преобразование между ISO-8559-1 и cp1251
Мое приложение Android использует библиотеку с открытым исходным кодом, которая принимает только текстовые данные в кодировке ISO-8859-1. У меня есть несколько пользователей из Восточной Европы,…
php: преобразование из cp1251 в utf8
У меня есть проблема с преобразованием строки из cp1251 в utf8… Мне нужно получить некоторые имена из базы данных, и эти имена находятся в cp1251(я не тот, кто создал эту базу данных, поэтому я не…
Как преобразовать utf8 в cp1251 для записи тега ID3_V1 файла mp3?
ID3_V1 поддерживает только кодировку latin1 . Для того, чтобы написать В1 теги с русскими символами, используется кодирование cp1251 является. Я хотел бы скопировать данные из тегов V2 (unicode) в…
Преобразование кодировки элемента DOM из CP1251 в UTF-8
У меня есть простой серверный код, который принимает запрос xml и вставляет его в виде строки в столбец Clob базы данных Oracle. Проблема в том, что клиентская сторона отправляет запрос xml с…
ocaml преобразовать строку в кодировке utf8 на cp1251
Помогите мне написать правильный код, мне нужно преобразовать строку из utf8 в cp1251. Использование библиотеки Uutf. мой код не работает let str = русский текст in let decode =…
Python (запросы) проблема кодирования (UTF-8-CP1251)
Я пытаюсь получить такой вид URL http://example.com/?param=%DD%CC%C0-15 с расширением requests python, как это: group = ЭМА-15.encode(‘cp1251’) r = requests.get(‘http://example.com/?param=’ + group)…
PHP строка преобразование кодировки из utf8 в cp1251 с заменой невозможных символов через html-мнемоника
Я преобразую строковое кодирование из широкого utf8 в ограниченное кодирование cp1251 .
Урок 14. кодирование текстовой информации — Информатика — 10 класс
Информатика, 10 класс. Урок № 14.
Тема — Кодирование текстовой информации
Цели и задачи урока:
— познакомиться со способами кодирования и декодирования текстовой информации с помощью кодовых таблиц и компьютера;
— познакомиться со способом определения информационного объема текстового сообщения;
— познакомиться с алгоритмом Хаффмана.
Вся информация в компьютере хранится в двоичном коде. Поэтому надо научиться преобразовывать символы в двоичный код.
Формула Хартли определяет количество информации в зависимости от количества возможных вариантов:
N=2i, где
N — это количество вариантов,
i — это количество бит, не обходимых для кодирования.
Если же мы преобразуем эту формулу и примем за N — количество символов в используемом алфавите (назовем это мощностью алфавита), то мы поймем, сколько памяти потребуется для кодирования одного символа.
N=2i, где N — кол-во возможных вариантов
i — кол-во бит, потребуемых для кодирования
Итак, если в нашем алфавите будет присутствовать только 32 символа, то каждый из них займет только 5 бит.
И тогда каждому символу мы дадим уникальный двоичный код. Такую таблицу мы будем назвать кодировочной.
Первая широко используемая кодировочная таблица была создана в США и называлась ASCII, что в переводе означало American standard code for information interchange. Как вы видите, в таблице присутствуют не только латинские буквы, но и цифры, и даже действия. Каждому символу отводится 7 бит, а значит, всего было закодировано 128 символов.
Но так как этого количества было недостаточно, стали создаваться другие таблицы, в которых можно было закодировать и другие символы. Например, таблица Windows-1251, которая, по сути, являлась изменением таблицы ASCII, в которую добавили буквы кириллицы. Таких таблиц было создано множество: MS-DOS, КОИ-8, ISO, Mac и другие:
Проблема использования таких различных таблиц приводила к тому, что текст, написанный на одном компьютере, мог некорректно читаться на другом. Например:
Поэтому была разработана международная таблица кодировки Unicode, включающая в себя как символы английского, русского, немецкого, арабского и других языков. На каждый символ в такой таблице отводится 16 бит, то есть она позволяет кодировать 65536 символов. Однако использование такой таблицы сильно «утяжеляет» текст. Поэтому существуют различные алгоритмы неравномерной кодировки текста, например, алгоритм Хаффмана.
АЛГОРИТМ ХАФФМАНА
Идея алгоритма Хаффмана основана на частоте появления символа в последовательности. Символ, который встречается в последовательности чаще всего, получает новый очень маленький код, а символ, который встречается реже всего, получает, наоборот, очень длинный код.
Пусть нам дано сообщение aaabcbeeffaabfffedbac.
Чтобы узнать наиболее выгодный префиксный код для такого сообщения, надо узнать частоту появления каждого символа в сообщении.
Шаг 1.
Подсчитайте и внесите в таблицу частоту появления каждого символа в сообщении:
У вас должно получиться:
Шаг 2.
Расположите буквы в порядке возрастания их частоты.
Шаг 3.
Теперь возьмем два символа с наименьшей чистотой и представим их листьями в дереве, частота которого будет равна сумме частот этих листьев.
Символы d и c превращаются в ветку дерева:
Шаг 4.
Проделываем эти шаги до тех пор, пока не получится дерево, содержащее все символы.
Итак, сортируем таблицу:
Шаг 5.
Объединяем символ e и символ cd в ветку дерева:
d
C
Шаг 6.
Сортируем:
Шаг 7.
Шаг 8.
Сортируем:
Шаг 9.
Шаг 10.
Сортируем:
Шаг 11.
Шаг 12.
Получился префиксный код. Теперь осталось расставить 1 и 0. Пусть каждая правая ветвь обозначает 1, а левая — 0.
Шаг 13.
Составляем код буквы, идя по ветке дерева от буквы к основанию дерева.
Тогда код для каждой буквы будет:
Задание №1
Закодируйте ASCII кодом слово MOSCOW.
Решение:
Составим таблицу и поместим туда слово MOSCOW. Используя таблицу ASCII кодов, закодируем все буквы слова:
M | O | S | C | O | W |
1001101 | 1001111 | 1010011 | 1000011 | 1001111 | 1110111 |
ОТВЕТ: 100110110011111010011100001110011111110111
Задание №2
Используя табличный код Windows1251, закодируйте слово КОМПЬЮТЕР.
Решение:
К | О | М | П | Ь | Ю | Т | Е | Р |
234 | 206 | 204 | 239 | 252 | 254 | 242 | 197 | 208 |
Ответ: 234206204239252254242197208
Задание №3
Используя алгоритма Хаффмана, закодируйте сообщение: Россия
Решение:
Давайте все левые ветви обозначим «1», а правые – «0»
Таким образом: С — 0, Р — 101, О — 100, И — 111, Я — 110
ОТВЕТ: 10110000111110
Разрабатывая просмотрщик текста в кодировке Win1251, нативной поддержки которой так не хватает Android-платформе, я поймал себя на мысли, что использую этот класс:
Существует понятие кодовая страница (code page) — это таблица соответствия каждому байту определённого символа. Символов у нас максимум 65536 (в unicode), а байт имеет лишь 255 значений, поэтому как ни крути, а все символы мы в один байт не закинем. Потому то и существуют различные кодировки. И для каждой кодировки существует своя кодовая таблица. Вот класс для Java SE, который создаёт кодовые таблицы для всех поддерживаемых кодировок. Для загрузки файлов из папки assets, нам понадобится класс CharsetLoader Открыть спойлер Закрыть спойлер
Осталось только написать класс, который кодирует/декодирует не символы, а целые строки/массивы байт. Класс StringCoder Открыть спойлер Закрыть спойлер
Пример использования:
Готовые проекты с исходниками: CodepageCreator (Java SE) Encodings (Android) ПоделитьсяДругие статьи автора |
Лабораторная работа № 3.
Аддитивные шифрыЛАБОРАТОРНАЯ РАБОТА № 3. АДДИТИВНЫЕ ШИФРЫ
В аддитивных шифрах используется сложение по модулю (mod) исходного сообщения с гаммой, представленных в числовом виде. Напомним, что результатом сложения двух целых чисел по модулю является остаток от деления (например, 5+10 mod 4 = 15 mod 4 = 3).
В литературе шифры этого класса часто называют потоковыми. Стойкость закрытия этими шифрами определяется, главным образом, качеством гаммы, которое зависит от длины периода и случайности распределения по периоду [1].
Длиною периода гаммы называется минимальное количество символов, после которого последовательность цифр в гамме начинает повторяться. Случайность распределения символов по периоду означает отсутствие закономерностей между появлением различных символов в пределах периода.
По длине периода различаются гаммы с конечным и бесконечным периодом. Если длина периода гаммы превышает длину шифруемого текста, гамма является истинно случайной и не используется для шифрования других сообщений, то такое преобразование является абсолютно стойким (совершенный шифр). Такой шифр нельзя вскрыть на основе статистической обработки шифрограммы.
Сложение по модулю N. В 1888 г. француз маркиз де Виари в одной из своих научных статей, посвященных криптографии, доказал, что при замене букв исходного сообщения и ключа на числа справедливы формулы
Ci = (Pi + Ki) mod N, (4)
Pi = (Ci + N — Ki) mod N, (5)
где Pi, Ci — i-ый символ открытого и шифрованного сообщения;
N — количество символов в алфавите;
Кi — i-ый символ гаммы (ключа). Если длина гаммы меньше, чем длина сообщения, то она используется повторно.
Данные формулы позволяют выполнить зашифрование / расшифрование по Виженеру при замене букв алфавита числами согласно следующей таблице (применительно к русскому алфавиту):
Рис.21. Таблица кодирования символов
Например, для шифрования используется русский алфавит (N = 33), открытое сообщение – «АБРАМОВ», гамма – «ЖУРИХИН». При замене символов на числа буква А будет представлена как 0, Б – 1, …, Я – 32. Результат шифрования показан в следующей таблице.
Таблица 2. Пример аддитивного шифрования по модулю N
Сложение по модулю 2. Является частным случаем предыдущего шифра и используется при шифровании в автоматизированных системах. Символы текста и гаммы представляются в двоичных кодах, а затем каждая пара двоичных разрядов складывается по модулю 2 (, для булевых величин аналог этой операции – XOR, «Исключающее ИЛИ»). Процедуры шифрования и дешифрования выполняются по следующим формулам
Ci = Pi Ki, (6)
Pi = Ci Ki. (7)
Перед иллюстрацией использования шифра приведем таблицу кодов символов Windows 1251 и их двоичное представление.
Таблица 3. Коды символов Windows 1251 и их двоичное представление
Примечание. Dec-код – десятичный код символа, Bin-код – двоичный код символа.
Пример шифрования сообщения «ВОВА» с помощью гаммы «ЮЛЯ» показан в следующей таблице.
Таблица 4. Пример аддитивного шифрования по модулю 2
Задание на лабораторную работу.
В лабораторной работе необходимо зашифровать свою фамилию с помощью шифров гаммирования по модулю N и модулю 2.
При оформлении отчета необходимо привести исходное сообщение (фамилию), гамму и таблицы зашифрования/дешифрования.
1Классический одноразовый шифровальный блокнот — большой неповторяющийся случайный набор символов ключа, написанный на листах бумаги, склеенных в блокнот. Шифровальщик при личной встрече снабжался блокнотом, каждая страница которого содержала ключ. Такой же блокнот имелся и у принимающей стороны. Использованные страницы после однократного использования уничтожились.
Краткая история кодировок от ASCII до UTF-8 – POPEL Agency
Наверняка все слышали, что информация в компьютерах хранится в виде двоичных чисел — нулей и единиц. Но не все знают, каким образом нолики и единички внутри превращаются в читабельный текст на экране. Всё, конечно же, очень просто: каждому символу соответствует определенная комбинация нулей и единиц — код. Совокупность таких кодов называется кодировкой.
На сегодняшний день самой распространенной кодировкой является UTF-8. Она включает в себя более двух миллионов символов: все возможные современные алфавиты, цифры, знаки препинания, математические и специальные символы, музыкальные знаки и символы вымерших форм письменности. А резерва UTF-8 хватит для размещения более двух миллиардов символов. Так что о смене кодировки в ближайшее время задумываться не придётся.
Однако торжество современных технологий — явление относительно новое. Согласно Google, самой распространенной в интернете кодировкой UTF-8 стала только в 2008 году — тогда ее использовали чуть более чем 25% проиндексированных веб-страниц. А еще в 2006 UTF-8 использовали менее чем 10% веб-страниц.
График изменения популярности кодировок в интернете.Стремительный рост популярности кодировки UTF-8 связан с целым рядом ее преимуществ перед предшественницами. Но чтобы действительно понять и оценить эти преимущества — нужно немного изучить историю вопроса.
ASCII
А начнем мы с возникновения кодировки ASCII, которую в середине двухтысячных и начала вытеснять собой из интернета кодировка UTF-8.
ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов. В американском варианте английского языка произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́].
— Статья об ASCII на Википедии
Кодировка ASCII была разработана в 1963 году Американской Ассоциацией Стандартов (которая позже стала Американским Национальным Институтом Стандартов — ANSI), впоследствии несколько раз обновлялась — в 1967 и 1986 годах. ASCII — 7-битная кодировка, включающая в себя 128 символов: 33 непечатных управляющих символа (влияющих на обработку текста и пробелов) и 95 печатных символов, включая цифры, буквы латинского алфавита в строчном и прописном вариантах и ряд пунктуационных символов.
Таблица кодов символов в ASCII.Расположение символов внутри кодировки упрощало сортировку, смену регистра букв и перевод десятичных чисел в двоичную форму и обратно — словом, постарались авторы на славу. Однако решить абсолютно все задачи эта кодировка не могла. В частности, в ASCII не было букв и символов многих национальных алфавитов.
ISO/IEC 646
По этой причине в 1972 году началась разработка группы кодировок, основанных на ASCII, где редко используемые символы из ASCII заменялись на необходимые. Группа включала в себя варианты кодировки для Канады, Китая, Кубы, Германии, Дании, Финляндии, Франции, Великобритании, Греции, Венгрии, Ирландии, Японии, Южной Кореи, Мальты, Норвегии, Швеции и Югославии.
Стандартизация кодировок группы позволила свести различия между кодировками разных стран к минимуму.
KOI8
Естественно, СССР не остался в стороне, разработав в 1974 году свою кодировку — KOI8 (Код Обмена Информацией, 8 бит). Как следует из названия, это была 8-битная кодировка, что позволяло включить в нее в два раза больше символов. KOI8 включала в себя цифры, буквы латинского и русского алфавита, а также знаки пунктуации, спецсимволы и псевдографику.
Таблица кодов символов в KOI8-R.Эта кодировка существует в нескольких вариантах для разных кириллических алфавитов, в частности: KOI8-R — для русского алфавита, и KOI8-U — для украинского. Кодировки KOI8 стали одними из самых популярных в русском сегменте интернет до распространения UTF-8.
ISO/IEC 8859
Ранние кодировки были ограничены 7 битами из-за особенностей некоторых протоколов передачи данных. Однако со временем эти ограничения свою актуальность потеряли, в то время как необходимость в дополнительных символах для языков, использующих латинский алфавит, только росла. Поэтому в середине 80-х началась работа над группой 8-битных кодировок, получившей название ISO/IEC 8859. Все кодировки этой группы были основаны на ASCII. Помимо расширения диапазона доступных символов за счет восьмого бита, на печатные символы была заменена часть устаревших к тому моменту непечатных управляющих символов.
Здесь стоит отметить две кодировки из группы. Первая — ISO-8859-1 — была опубликована в 1987 году. Она включала в себя так называемый «Латинский алфавит номер 1» (сокращенно Latin-1), состоящий из 191 символа латинского письма. Этот набор символов используется по всей Северной и Южной Америке, в Западной Европе, Океании и на большей части Африки. Кодировка ISO-8859-1 стала основой для наиболее популярных 8-битных кодировок.
В 1988 году была опубликована ISO-8859-5. Она была создана для работы с кириллическими языками. Включенные в эту кодировку символы обеспечивали полную поддержку русского, белорусского, болгарского, сербского и македонского языков. А вот для полной поддержки украинского языка ей не хватало буквы «ґ». Особого распространения эта кодировка не получила, но интересен сам факт разработки кириллической кодировки в рамках группы кодировок ISO/IEC.
Windows-125x
В начале 90-х годов компания Microsoft разработала группу кодировок для ОС Windows. Среди прочих хочется отметить две кодировки: Windows-1251 и Windows-1252.
Windows-1251 была разработана на базе «самодельных» кодировок для русификаторов Windows при участии российской компании-разработчика ПО «ПараГраф» и СП «Диалог» — совместного советско-американского предприятия в области вычислительной техники. В эту кодировку вошли все символы русского и близких к нему языков: украинского, белорусского, болгарского, сербского и македонского. На практике этого оказалось достаточно, чтобы кодировка Windows-1251 закрепилась в интернете вплоть до распространения UTF-8.
Таблица кодов символов в Windows-1251.Windows-1252 была разработана на основе кодировки ISO-8859-1 путем замены ряда непечатных контрольных символов на печатные (в частности, символ евро, ряд пунктуационных и несколько других символов). Сходство этих двух кодировок часто приводило к неверному отображению текста, когда вместо новых символов из Windows-1252 отображались знаки вопроса. Эта ситуация была настолько частой, что многие почтовые клиенты для отображения писем кодировки ISO-8859-1 стали использовать Windows-1252. В конечном итоге такое поведение было внесено в спецификацию HTML 5 в качестве требования.
Переходный период
Начиная с середины 90-х в кириллическом сегменте интернета можно было регулярно наблюдать проблемы с кодировками. Виной тому было сразу несколько факторов. Во-первых, инструменты разработки и браузеры того времени не умели грамотно работать с кодировками. Во-вторых, во всех наиболее распространенных кириллических кодировках коды кириллических символов были разными. В англоязычном сегменте сети последней проблемы не было, ведь во всех основных кодировках, начиная с ASCII, символы латиницы имели одинаковые коды символов.
Интересно, что в KOI8-R русский алфавит был расположен не в алфавитном порядке: позиции символов русского алфавита соответствовали их фонетическим аналогам в английском алфавите. Таким образом, при интерпретации кодировки текста как 7-битной, русский текст превращался в некое подобие транслита. Например, слова «Русский Текст» превратились бы в «rUSSKIJ tEKST».
Совокупность этих факторов привела к появлению на большинстве сайтов страниц с выбором кодировки. Несмотря на то, что кодировка UTF-8 существовала с 1993 года, переходить на нее не спешили, ведь каждый кириллический символ, кодированный с помощью UTF-8, занимал 2 байта, что приводило к двукратному увеличению объема данных, необходимых для хранения и передачи кириллического текста. Во времена модемной связи и относительно малых объемов устройств хранения информации это была непозволительная роскошь.
UTF-8
Впервые кодировка UTF-8 была официально представлена на конференции USENIX в Сан Диего в январе 1993. От других мультибайтных кодировок ее отличала полная совместимость с ASCII: все символы ASCII в UTF-8 кодируются 7 битами. Каждый символ кодировки, отличный от ASCII, состоит из ведущего байта, указывающего длину последовательности, и одного или нескольких продолжающих байт. Такой принцип позволяет определить длину последовательности только по первому байту. Коды символов ASCII, ведущих и продолжающих байт не пересекаются, что позволяет легко найти начало последовательности простым откатом назад максимум на пять байт.
В ноябре 2003 года стандартом RFC-3629 максимальная длина последовательности UTF-8 была ограничена четырьмя байтами, однако потенциально UTF-8 позволяет использовать последовательности вплоть до шести байт.
Принцип кодирования
У всех однобайтных символов старший бит кода установлен в 0
и полностью совпадает с кодом символа в ASCII:
У всех многобайтных последовательностей ведущий байт начинается с двух и более единиц в старших битах. Количество единиц ведущего байта соответствует длине мультибайтной последовательности. Все продолжающие байты начинаются с 10
в двух старших битах. Все неиспользуемые схемой кодирования биты мультибайтных последовательностей используются для кодирования символов:
Такой подход создает несколько символьных диапазонов разной величины. Первый диапазон использует 7 бит и кодирует до 128 символов. Второй диапазон использует 11 бит и кодирует до 2 048 символов. Третий и четвертый диапазоны используют 16 бит и 21 бит соответственно и позволяют кодировать до 65 536 и 2 097 152 соответственно. В сумме все четыре диапазона значений позволяют кодировать до 2 164 864 символов.
Кодировка UTF-8 является универсальной и имеет внушительный резерв на будущее. Это делает ее наиболее удобной кодировкой для использования в интернете.
ISO-8859-1 | ISO8859-1 | Западно-европейская Latin-1. |
ISO-8859-5 | ISO8859-5 | Редко используемая кириллическая кодировка (Latin/Cyrillic). |
ISO-8859-15 | ISO8859-15 | Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1 (ISO-8859-1). |
UTF-8 | 8-битная Unicode, совместимая с ASCII. | |
cp866 | ibm866, 866 | Кириллическая кодировка, применяемая в DOS. |
cp1251 | Windows-1251, win-1251, 1251 | Кириллическая кодировка, применяемая в Windows. |
cp1252 | Windows-1252, 1252 | Западно-европейская кодировка, применяемая в Windows. |
KOI8-R | koi8-ru, koi8r | Русская кодировка. |
BIG5 | 950 | Традиционный китайский, применяется в основном на Тайване. |
GB2312 | 936 | Упрощённый китайский, стандартная национальная кодировка. |
BIG5-HKSCS | Расширенная Big5, применяемая в Гонконге. | |
Shift_JIS | SJIS, SJIS-win, cp932, 932 | Японская кодировка. |
EUC-JP | EUCJP, eucJP-win | Японская кодировка. |
MacRoman | Кодировка, используемая в Mac OS. | |
'' | Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (см. nl_langinfo() и setlocale()) в указанном порядке. Не рекомендуется к использованию. |
PostgreSQL: Документация: 9.3: Поддержка набора символов
Поддержка набора символов в PostgreSQL позволяет хранить текст в множество наборов символов (также называемых кодировками), включая однобайтовые наборы символов, такие как серия ISO 8859 и многобайтовые наборы символов, такие как EUC (Extended Unix Code), UTF-8 и Mule внутренний код. Можно использовать все поддерживаемые наборы символов. прозрачно для клиентов, но некоторые из них не поддерживаются для использования внутри сервера (то есть как кодирование на стороне сервера).По умолчанию набор символов выбирается при инициализации кластера базы данных PostgreSQL с помощью initdb. Его можно переопределить при создании база данных, поэтому у вас может быть несколько баз данных с разными набор символов.
Однако важным ограничением является то, что каждая база данных набор символов должен быть совместим с настройками локали базы данных LC_CTYPE (классификация символов) и LC_COLLATE (порядок сортировки строк). Для C или POSIX языковой стандарт, разрешен любой набор символов, но для других языков есть — это только один набор символов, который будет работать правильно.(В Windows однако кодировку UTF-8 можно использовать с любой локалью.)
Таблица 22-1 показывает наборы символов, доступные для использования в PostgreSQL.
Таблица 22-1. PostgreSQL Наборы символов
Имя | Описание | Язык | Сервер? | байт / символ | Псевдонимы |
---|---|---|---|---|---|
BIG5 | Большая пятерка | Традиционный китайский | Нет | 1-2 | WIN950, Windows950 |
EUC_CN | Расширенный код UNIX — CN | Упрощенный китайский | Есть | 1-3 | |
EUC_JP | Расширенный код UNIX-JP | Японский | Есть | 1-3 | |
EUC_JIS_2004 | Расширенный код UNIX-JP, JIS X 0213 | Японский | Есть | 1-3 | |
EUC_KR | Расширенный код UNIX-KR | Корейский | Есть | 1-3 | |
EUC_TW | Расширенный код UNIX-TW | Традиционный китайский, Тайваньский | Есть | 1-3 | |
ГБ18030 | Национальный стандарт | китайский | Нет | 1-4 | |
ГБК | Расширенный национальный стандарт | Упрощенный китайский | Нет | 1-2 | WIN936, Windows936 |
ISO_8859_5 | ISO 8859-5, ECMA 113 | Латиница / кириллица | Есть | 1 | |
ISO_8859_6 | ISO 8859-6, ECMA 114 | Латинский / арабский | Есть | 1 | |
ISO_8859_7 | ISO 8859-7, ECMA 118 | Латинский / греческий | Есть | 1 | |
ISO_8859_8 | ISO 8859-8, ECMA 121 | Латиница / Иврит | Есть | 1 | |
JOHAB | JOHAB | Корейский (хангыль) | Нет | 1-3 | |
KOI8R | КОИ8-Р | Кириллица (русская) | Есть | 1 | КОИ8 |
КОИ8У | КОИ8-У | Кириллица (украинская) | Есть | 1 | |
ЛАТИН 1 | ISO 8859-1, ECMA 94 | Западноевропейская | Есть | 1 | ISO88591 |
ЛАТИН 2 | ISO 8859-2, ECMA 94 | Центральноевропейская | Есть | 1 | ISO88592 |
ЛАТИН 3 | ISO 8859-3, ECMA 94 | Южноевропейский | Есть | 1 | ISO88593 |
ЛАТИН 4 | ISO 8859-4, ECMA 94 | Северо-Европейский | Есть | 1 | ISO88594 |
LATIN5 | ISO 8859-9, ECMA 128 | Турецкий | Есть | 1 | ISO88599 |
LATIN6 | ISO 8859-10, ECMA 144 | Nordic | Есть | 1 | ISO885910 |
LATIN7 | ISO 8859-13 | Балтика | Есть | 1 | ISO885913 |
ЛАТИН 8 | ISO 8859-14 | кельтский | Есть | 1 | ISO885914 |
ЛАТИН 9 | ISO 8859-15 | LATIN1 с евро и акцентами | Есть | 1 | ISO885915 |
ЛАТИН 10 | ISO 8859-16, ASRO SR 14111 | Румынский | Есть | 1 | ISO885916 |
MULE_INTERNAL | Мул внутренний код | Многоязычный Emacs | Есть | 1-4 | |
SJIS | Сдвиг JIS | Японский | Нет | 1-2 | Мсканджи, ShiftJIS, WIN932, Окна932 |
SHIFT_JIS_2004 | Сдвиг JIS, JIS X 0213 | Японский | Нет | 1-2 | |
SQL_ASCII | не указано (см. Текст) | любая | Есть | 1 | |
UHC | Единый код хангыль | Корейский | Нет | 1-2 | WIN949, Windows949 |
UTF8 | Unicode, 8-бит | все | Есть | 1-4 | Юникод |
WIN866 | Окна CP866 | Кириллица | Есть | 1 | ALT |
WIN874 | Окна CP874 | Тайский | Есть | 1 | |
WIN1250 | Окна CP1250 | Центральноевропейская | Есть | 1 | |
WIN1251 | Окна CP1251 | Кириллица | Есть | 1 | ВЫИГРАТЬ |
WIN1252 | Окна CP1252 | Западноевропейская | Есть | 1 | |
WIN1253 | Окна CP1253 | Греческий | Есть | 1 | |
WIN1254 | Окна CP1254 | Турецкий | Есть | 1 | |
WIN1255 | Окна CP1255 | Еврейский | Есть | 1 | |
WIN1256 | Окна CP1256 | Арабский | Есть | 1 | |
WIN1257 | Окна CP1257 | Балтика | Есть | 1 | |
WIN1258 | Окна CP1258 | Вьетнамский | Есть | 1 | ABC, TCVN, TCVN5712, VSCII |
Не все клиентские API поддерживают все перечисленные наборы символов. Например, драйвер PostgreSQL JDBC не поддерживает MULE_INTERNAL, LATIN6, LATIN8 и ЛАТИНСКИЙ 10.
Параметр SQL_ASCII ведет себя значительно отличается от других настроек. Когда сервер набор символов — SQL_ASCII, сервер интерпретирует байтовые значения 0-127 в соответствии со стандартом ASCII, а байтовые значения 128–255 считаются неинтерпретируемыми символами. Нет преобразование кодировки будет выполнено, если установлено значение SQL_ASCII. Таким образом, этот параметр не так уж и хорош. объявление, что используется определенная кодировка, как объявление незнание кодировки.В большинстве случаев, если вы работаете с любыми данными, отличными от ASCII, неразумно использовать параметр SQL_ASCII, потому что PostgreSQL не сможет вам помочь преобразование или проверка символов, отличных от ASCII.
initdb определяет символ по умолчанию установить (кодировку) для PostgreSQL кластер. Например,
initdb -E EUC_JP
устанавливает набор символов по умолчанию на EUC_JP (расширенный код Unix для японского языка). Ты можешь используйте —encoding вместо -E, если вы предпочитаете более длинные строки параметров. Если нет -E или —encoding задана опция, initdb пытается определить подходящую кодировку для использования на основе указанного или языковой стандарт по умолчанию.
Вы можете указать нестандартную кодировку при создании базы данных. время при условии, что кодировка совместима с выбранной язык:
createdb -E EUC_KR -T template0 --lc-collate = ko_KR.euckr --lc-ctype = ko_KR.euckr корейский
Это создаст базу данных с именем korean, которая использует набор символов EUC_KR и локаль ko_KR. Другой способ добиться этого — использовать эту команду SQL:
СОЗДАТЬ БАЗУ ДАННЫХ корейский С КОДИРОВАНИЕМ 'EUC_KR' LC_COLLATE = 'ko_KR.euckr' LC_CTYPE = 'ko_KR.euckr 'TEMPLATE = template0;
Обратите внимание, что приведенные выше команды определяют копирование базы данных template0. При копировании любой другой базы данных, настройки кодировки и локали не могут быть изменены по сравнению с исходной базы данных, поскольку это может привести к повреждению данных. Для дополнительную информацию см. в разделе 21.3.
Кодировка для базы данных хранится в системном каталоге. pg_database. Вы можете увидеть это, используя параметр psql -l или команда \ l.
$ psql -l Список баз данных Имя | Владелец | Кодирование | Сопоставление | Ctype | Привилегии доступа ----------- + ---------- + ----------- + ------------- + - ------------ + ------------------------------------- clocaledb | хлиннака | SQL_ASCII | C | C | englishdb | хлиннака | UTF8 | en_GB.UTF8 | en_GB.UTF8 | японский | хлиннака | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 | корейский | хлиннака | EUC_KR | ko_KR.euckr | ko_KR.euckr | postgres | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 | template0 | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 | {= c / hlinnaka, hlinnaka = CTc / hlinnaka} template1 | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 | {= c / hlinnaka, hlinnaka = CTc / hlinnaka} (7 рядов)
Важно: В большинстве современных операционных систем PostgreSQL может определить, какой набор символов подразумевается настройкой LC_CTYPE, и это заставит использовать только соответствующую кодировку базы данных. На старые системы, вы несете ответственность за использование кодировка, ожидаемая выбранной вами локалью. Ошибка в эта область может привести к странному поведению зависящего от локали такие операции, как сортировка.
PostgreSQL позволит суперпользователи для создания баз данных с кодировкой SQL_ASCII, даже если LC_CTYPE не C или POSIX. Как отмечалось выше, SQL_ASCII не требует, чтобы данные, хранящиеся в база данных имеет какую-либо конкретную кодировку, поэтому этот выбор ставит риски ненадлежащего поведения, зависящего от местных условий.Используя эту комбинацию настройки устарели и когда-нибудь могут быть полностью запрещены.
PostgreSQL поддерживает автоматический преобразование набора символов между сервером и клиентом наверняка комбинации наборов символов. Информация о преобразовании хранится в системный каталог pg_conversion. PostgreSQL поставляется с некоторыми предопределенные преобразования, как показано в Таблице 22-2. Ты может создать новое преобразование с помощью команды SQL CREATE CONVERSION.
Таблица 22-2. Преобразование набора символов клиент / сервер
Набор символов сервера | Доступные клиентские наборы символов |
---|---|
BIG5 | не поддерживается в качестве сервера кодировка |
EUC_CN | EUC_CN, MULE_INTERNAL, UTF8 |
EUC_JP | EUC_JP, MULE_INTERNAL, SJIS, UTF8 |
EUC_JIS_2004 | EUC_JIS_2004, SHIFT_JIS_2004, UTF8 |
EUC_KR | EUC_KR, MULE_INTERNAL, UTF8 |
EUC_TW | EUC_TW, BIG5, MULE_INTERNAL, UTF8 |
ГБ18030 | не поддерживается в качестве сервера кодировка |
ГБК | не поддерживается в качестве сервера кодировка |
ISO_8859_5 | ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866, WIN1251 |
ISO_8859_6 | ISO_8859_6, UTF8 |
ISO_8859_7 | ISO_8859_7, UTF8 |
ISO_8859_8 | ISO_8859_8, UTF8 |
JOHAB | не поддерживается в качестве сервера кодировка |
KOI8R | KOI8R, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251 |
КОИ8У | КОИ8У, UTF8 |
ЛАТИН 1 | LATIN1, MULE_INTERNAL, UTF8 |
ЛАТИН 2 | LATIN2, MULE_INTERNAL, UTF8, WIN1250 |
ЛАТИН 3 | LATIN3, MULE_INTERNAL, UTF8 |
ЛАТИН 4 | LATIN4, MULE_INTERNAL, UTF8 |
LATIN5 | LATIN5, UTF8 |
LATIN6 | LATIN6, UTF8 |
LATIN7 | LATIN7, UTF8 |
ЛАТИН 8 | LATIN8, UTF8 |
ЛАТИН 9 | LATIN9, UTF8 |
ЛАТИН 10 | LATIN10, UTF8 |
MULE_INTERNAL | MULE_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_ASCII | любой (конвертации не будет выполнено) |
UHC | не поддерживается в качестве сервера кодировка |
UTF8 | все поддерживаются кодировки |
WIN866 | WIN866, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN1251 |
WIN874 | WIN874, UTF8 |
WIN1250 | WIN1250, LATIN2, MULE_INTERNAL, UTF8 |
WIN1251 | WIN1251, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866 |
WIN1252 | WIN1252, UTF8 |
WIN1253 | WIN1253, UTF8 |
WIN1254 | WIN1254, UTF8 |
WIN1255 | WIN1255, UTF8 |
WIN1256 | WIN1256, UTF8 |
WIN1257 | WIN1257, UTF8 |
WIN1258 | WIN1258, UTF8 |
Чтобы включить автоматическое преобразование набора символов, вы должны указать PostgreSQL набор символов (кодировка), которую вы хотели бы использовать в клиенте. Есть несколько способов добиться этого:
Использование команды \ encoding в psql. \ encoding позволяет изменять кодировку клиента на муха. Например, чтобы изменить кодировку на SJIS, введите:
\ кодировка SJIS
libpq (Раздел 31.10) имеет функции для управления клиентская кодировка.
Использование SET client_encoding TO. Параметр кодирование клиента может быть выполнено с помощью этой команды SQL:
УСТАНОВИТЬ CLIENT_ENCODING TO 'значение';
Также вы можете использовать стандартный синтаксис SQL SET ИМЕНА для этого:
УСТАНОВИТЬ ИМЕНА 'значение';
Для запроса текущей клиентской кодировки:
ПОКАЗАТЬ client_encoding;
Для возврата к кодировке по умолчанию:
СБРОС client_encoding;
Использование PGCLIENTENCODING.Если переменная среды PGCLIENTENCODING — это определенная в клиентской среде, эта клиентская кодировка автоматически выбирается при подключении к серверу. (Впоследствии это можно изменить с помощью любого из других методов. упомянуто выше.)
Использование переменной конфигурации client_encoding. Если установлена переменная client_encoding, эта клиентская кодировка выбирается автоматически при подключении к сервер сделан. (Впоследствии это может быть отменено с помощью любого других методов, упомянутых выше.)
Если преобразование определенного символа невозможно — предположим, вы выбрали EUC_JP для сервера и LATIN1 для клиента, а некоторые Возвращаются японские символы, которые не имеют представления в LATIN1 — сообщается об ошибке.
Если набор символов клиента определен как SQL_ASCII, преобразование кодировки отключено, независимо от набора символов сервера. Как и в случае с сервером, использование SQL_ASCII неразумно, если вы не работа с данными в формате ASCII.
Это хорошие источники для начала изучения различных видов системы кодирования.
- CJKV Обработка информации: китайский, Вычислительная техника в Японии, Корее и Вьетнаме
Содержит подробные объяснения EUC_JP, EUC_CN, EUC_KR, EUC_TW.
- http://www.unicode.org/
Веб-сайт Консорциума Unicode.
- RFC 3629
UTF-8 (8-битный UCS / Unicode Формат преобразования) определяется здесь.
windows-1251.txt
windows-1251.txt# # Имя: cp1251 в таблицу Unicode # Версия Unicode: 2.0 # Версия таблицы: 2.01 # Формат таблицы: Формат A # Дата: 15.04.98 # # Контакт: [email protected] # # Общие примечания: нет # # Формат: три столбца, разделенных табуляцией # Столбец # 1 - это код cp1251 (в шестнадцатеричном формате) # Столбец # 2 - это Unicode (в шестнадцатеричном виде 0xXXXX) # Столбец # 3 - это имя Unicode (после знака комментария '#') # # Записи в порядке cp1251 # 0x00 0x0000 # ПУСТО 0x01 0x0001 # НАЧАЛО ЗАГОЛОВКИ 0x02 0x0002 # НАЧАЛО ТЕКСТА 0x03 0x0003 # КОНЕЦ ТЕКСТА 0x04 0x0004 # КОНЕЦ ПЕРЕДАЧИ 0x05 0x0005 # ЗАПРОС 0x06 0x0006 # ПОДПИСАТЬСЯ 0x07 0x0007 # БЕЛЛ 0x08 0x0008 #BACKSPACE 0x09 0x0009 # ГОРИЗОНТАЛЬНАЯ ТАБЛИЦА 0x0A 0x000A # ЛИНИЯ ПОДАЧИ 0x0B 0x000B # ВЕРТИКАЛЬНАЯ ТАБЛИЦА 0x0C 0x000C # ФОРМА ПОДАЧИ 0x0D 0x000D # ВОЗВРАТ ЗАРЯДА 0x0E 0x000E # ПЕРЕМЕЩЕНИЕ 0x0F 0x000F #SHIFT IN 0x10 0x0010 # ОТКЛЮЧЕНИЕ СВЯЗИ ДАННЫХ 0x11 0x0011 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ОДИН 0x12 0x0012 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ДВА 0x13 0x0013 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ТРИ 0x14 0x0014 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ЧЕТВЕРТОЕ 0x15 0x0015 # ОТРИЦАТЕЛЬНОЕ ПОДТВЕРЖДЕНИЕ 0x16 0x0016 # СИНХРОННЫЙ ПРОХОЖДЕНИЕ 0x17 0x0017 # КОНЕЦ БЛОКА ПЕРЕДАЧИ 0x18 0x0018 # ОТМЕНА 0x19 0x0019 # КОНЕЦ СРЕДЫ 0x1A 0x001A # ПОДСТАВИТЬ 0x1B 0x001B # ЭСКЕЙП 0x1C 0x001C # РАЗДЕЛИТЕЛЬ ФАЙЛОВ 0x1D 0x001D # СЕПАРАТОР ГРУПП 0x1E 0x001E # ЗАПИСЬ СЕПАРАТОР 0x1F 0x001F # РАЗДЕЛИТЕЛЬ 0x20 0x0020 # ПРОБЕЛ 0x21 0x0021 # восклицательный знак 0x22 0x0022 # ЦИТАТНЫЙ ЗНАК 0x23 0x0023 # НОМЕРНЫЙ ЗНАК 0x24 0x0024 # ЗНАК ДОЛЛАР 0x25 0x0025 # ЗНАК ПЕРСОНА 0x26 0x0026 # АМПЕРСАНД 0x27 0x0027 # АПОСТРОФ 0x28 0x0028 # ЛЕВЫЙ ПАРЕНТЕЗ 0x29 0x0029 # ПРАВИЛЬНЫЙ ПАРЕНТЕЗ 0x2A 0x002A # АСТЕРИСК 0x2B 0x002B # ПОДПИСАТЬСЯ 0x2C 0x002C #COMMA 0x2D 0x002D # ДЕФИС-МИНУС 0x2E 0x002E # ПОЛНАЯ ОСТАНОВКА 0x2F 0x002F # СОЛИДУС 0x30 0x0030 # ЦИФРОВОЙ НУЛЬ 0x31 0x0031 # ЦИФРА ОДИН 0x32 0x0032 # ЦИФРОВОЙ ДВА 0x33 0x0033 # ЦИФРА ТРИ 0x34 0x0034 # ЦИФРА ЧЕТЫРЕ 0x35 0x0035 # ЦИФРОВАЯ ПЯТЬ 0x36 0x0036 # ШЕСТЬ ЦИФРОВ 0x37 0x0037 # ЦИФРОВАЯ СЕМЬ 0x38 0x0038 # ЦИФРА ВОСЕМЬ 0x39 0x0039 # ЦИФРА ДЕВЯТЬ 0x3A 0x003A # КОЛОН 0x3B 0x003B # СЕМИКОЛОН 0x3C 0x003C # МЕНЬШЕ ЗНАКА 0x3D 0x003D # ЗНАК РАВНО 0x3E 0x003E # БОЛЬШЕ, ЧЕМ ЗНАК 0x3F 0x003F # ВОПРОСНАЯ МЕТКА 0x40 0x0040 # КОММЕРЧЕСКИЙ AT 0x41 0x0041 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА A 0x42 0x0042 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА B 0x43 0x0043 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА C 0x44 0x0044 # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА D 0x45 0x0045 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА E 0x46 0x0046 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА F 0x47 0x0047 # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА G 0x48 0x0048 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА H 0x49 0x0049 # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА I 0x4A 0x004A # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА J 0x4B 0x004B # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА K 0x4C 0x004C # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА L 0x4D 0x004D # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА M 0x4E 0x004E # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА N 0x4F 0x004F # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА O 0x50 0x0050 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА P 0x51 0x0051 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА Q 0x52 0x0052 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА R 0x53 0x0053 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА S 0x54 0x0054 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА T 0x55 0x0055 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА U 0x56 0x0056 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА V 0x57 0x0057 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА W 0x58 0x0058 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА X 0x59 0x0059 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА Y 0x5A 0x005A # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА Z 0x5B 0x005B # КВАДРАТНЫЙ КРОНШТЕЙН ЛЕВОЙ 0x5C 0x005C # ОБРАТНЫЙ СОЛИД 0x5D 0x005D # ПРАВЫЙ КВАДРАТНЫЙ КРОНШТЕЙН 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F # НИЗКАЯ СТРОКА 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A 0x62 0x0062 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА B 0x63 0x0063 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА C 0x64 0x0064 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА D 0x65 0x0065 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА E 0x66 0x0066 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА F 0x67 0x0067 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА G 0x68 0x0068 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА H 0x69 0x0069 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА I 0x6A 0x006A # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА J 0x6B 0x006B # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА K 0x6C 0x006C # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА L 0x6D 0x006D # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА M 0x6E 0x006E # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА N 0x6F 0x006F # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O 0x70 0x0070 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА P 0x71 0x0071 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Q 0x72 0x0072 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА R 0x73 0x0073 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА S 0x74 0x0074 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА T 0x75 0x0075 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА U 0x76 0x0076 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА V 0x77 0x0077 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА W 0x78 0x0078 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА X 0x79 0x0079 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Y 0x7A 0x007A # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Z 0x7B 0x007B # ЛЕВЫЙ ИЗОЛИРУЮЩИЙ КРОНШТЕЙН 0x7C 0x007C # ВЕРТИКАЛЬНАЯ ЛИНИЯ 0x7D 0x007D # ПРАВЫЙ ИЗГОЛЬНЫЙ КРОНШТЕЙН 0x7E 0x007E # ТИЛЬДА 0x7F 0x007F # УДАЛИТЬ 0x80 0x0402 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА DJE 0x81 0x0403 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА GJE 0x82 0x201A # ОДИН ЦИТАТНЫЙ МАРК НИЗКОГО-9 0x83 0x0453 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА GJE 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 # ГОРИЗОНТАЛЬНЫЙ ЭЛЛИПСИС 0x86 0x2020 # КИНЖАЛ 0x87 0x2021 # ДВОЙНОЙ КИНЖАЛ 0x88 0x20AC # ЗНАК ЕВРО 0x89 0x2030 # ЗАПИСЬ МИЛЛЯ 0x8A 0x0409 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА LJE 0x8B 0x2039 # ОДИН ЛЕВЫЙ УГОЛ ЦИТАТЫ 0x8C 0x040A # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА NJE 0x8D 0x040C # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА KJE 0x8E 0x040B # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА TSHE 0x8F 0x040F # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ДЖЕ 0x90 0x0452 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА DJE 0x91 0x2018 # ЛЕВАЯ ОДИНАРНАЯ ЦИТАТА 0x92 0x2019 # ПРАВАЯ ОДИНАРНАЯ ЦИТАТА 0x93 0x201C # ЛЕВАЯ МАРКА ДВОЙНОЙ ЦИТАТЫ 0x94 0x201D # ПРАВАЯ ДВОЙНАЯ ЦИТАТА 0x95 0x2022 # БЮЛЛЕТЕНЬ 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 # НЕОПРЕДЕЛЕННО 0x99 0x2122 # ТОВАРНЫЙ ЗНАК 0x9A 0x0459 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА LJE 0x9B 0x203A # ОДИН УГОЛ ВПРАВО ЦИТАТНЫЙ МАРК 0x9C 0x045A # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА NJE 0x9D 0x045C # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА KJE 0x9E 0x045B # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА TSHE 0x9F 0x045F # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ДЖЕ 0xA0 0x00A0 # ПРОБЕЛ БЕЗ ПЕРЕРЫВА 0xA1 0x040E # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА КОРОТКАЯ U 0xA2 0x045E # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА КОРОТКАЯ U 0xA3 0x0408 # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА JE 0xA4 0x00A4 # ЗНАК ВАЛЮТЫ 0xA5 0x0490 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА GHE С ПОВОРОТОМ 0xA6 0x00A6 # Сломанная полоса 0xA7 0x00A7 # ЗНАК РАЗДЕЛА 0xA8 0x0401 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА IO 0xA9 0x00A9 # ЗНАК АВТОРСКОГО ПРАВА 0xAA 0x0404 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА УКРАИНСКИЙ IE 0xAB 0x00AB # ДВОЙНОЙ УГЛОВОЙ ЦИТАТНЫЙ МАРК, УКАЗАННЫЙ ВЛЕВО 0xAC 0x00AC # БЕЗ ЗНАКА 0xAD 0x00AD # МЯГКИЙ ДЕФИС 0xAE 0x00AE # ЗАПИСАННЫЙ ЗНАК 0xAF 0x0407 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА YI 0xB0 0x00B0 # ЗНАК СТЕПЕНИ 0xB1 0x00B1 # ЗНАК ПЛЮС-МИНУС 0xB2 0x0406 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА БЕЛОРУССКО-УКРАИНСКАЯ I 0xB3 0x0456 # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА БЕЛОРУССКО-УКРАИНСКАЯ I 0xB4 0x0491 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА GHE С ПОВОРОТОМ 0xB5 0x00B5 # ЗНАК МИКРО 0xB6 0x00B6 # ЗНАК ПИЛКРОУ 0xB7 0x00B7 # СРЕДНЯЯ ТОЧКА 0xB8 0x0451 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА IO 0xB9 0x2116 # ЗНАК ЧИСЛА 0xBA 0x0454 # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА УКРАИНСКИЙ IE 0xBB 0x00BB # ДВОЙНОЙ УГОЛ ЦИТАТЫ, УКАЗЫВАЮЩИЙ ВПРАВО 0xBC 0x0458 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА JE 0xBD 0x0405 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА DZE 0xBE 0x0455 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА DZE 0xBF 0x0457 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА YI 0xC0 0x0410 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА A 0xC1 0x0411 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА BE 0xC2 0x0412 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА VE 0xC3 0x0413 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА GHE 0xC4 0x0414 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА DE 0xC5 0x0415 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА IE 0xC6 0x0416 # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ZHE 0xC7 0x0417 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ZE 0xC8 0x0418 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА I 0xC9 0x0419 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА КОРОТКАЯ I 0xCA 0x041A # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА KA 0xCB 0x041B # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EL 0xCC 0x041C # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EM 0xCD 0x041D # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EN 0xCE 0x041E # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА O 0xCF 0x041F # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА PE 0xD0 0x0420 # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ER 0xD1 0x0421 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ES 0xD2 0x0422 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА TE 0xD3 0x0423 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА U 0xD4 0x0424 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EF 0xD5 0x0425 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА HA 0xD6 0x0426 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА TSE 0xD7 0x0427 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА CHE 0xD8 0x0428 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА SHA 0xD9 0x0429 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ЩА 0xDA 0x042A # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ЖЕСТКИЙ ЗНАК 0xDB 0x042B # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ЙЕРУ 0xDC 0x042C # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА МЯГКИЙ ЗНАК 0xDD 0x042D # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА E 0xDE 0x042E # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА YU 0xDF 0x042F # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА YA 0xE0 0x0430 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА A 0xE1 0x0431 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА BE 0xE2 0x0432 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА VE 0xE3 0x0433 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА GHE 0xE4 0x0434 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА DE 0xE5 0x0435 # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА IE 0xE6 0x0436 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ZHE 0xE7 0x0437 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ZE 0xE8 0x0438 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА I 0xE9 0x0439 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА КОРОТКАЯ I 0xEA 0x043A # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА KA 0xEB 0x043B # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EL 0xEC 0x043C # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EM 0xED 0x043D # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EN 0xEE 0x043E # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА O 0xEF 0x043F # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА PE 0xF0 0x0440 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ER 0xF1 0x0441 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ES 0xF2 0x0442 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА TE 0xF3 0x0443 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА U 0xF4 0x0444 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EF 0xF5 0x0445 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА HA 0xF6 0x0446 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА TSE 0xF7 0x0447 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА CHE 0xF8 0x0448 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА SHA 0xF9 0x0449 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ЩА 0xFA 0x044A # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА ЖЕСТКИЙ ЗНАК 0xFB 0x044B # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ЕРУ 0xFC 0x044C # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА МЯГКИЙ ЗНАК 0xFD 0x044D # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА E 0xFE 0x044E # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА YU 0xFF 0x044F # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА YA
Модуль ngx_http_charset_module
Модуль ngx_http_charset_module
Модуль ngx_http_charset_module
добавляет указанный
charset в поле заголовка ответа Content-Type. Кроме того, модуль может конвертировать данные из одной кодировки в другую,
с некоторыми ограничениями:
- конвертация осуществляется в одну сторону — от сервера к клиенту,
- могут быть преобразованы только однобайтовые кодировки
- или однобайтовые кодировки в / из UTF-8.
Пример конфигурации
включить conf / koi-win; кодировка windows-1251; source_charset koi8-r;
Директивы
Синтаксис: | кодировка |
---|---|
По умолчанию: | charset off; |
Контекст: | http , server , location , if in location |
Добавляет указанную кодировку в Content-Type. поле заголовка ответа.Если эта кодировка отличается от указанной в директиве source_charset выполняется преобразование.
Параметр off
отменяет добавление кодировки.
в поле заголовка ответа Content-Type.
Кодировку можно определить с помощью переменной:
charset $ charset;
В таком случае должны присутствовать все возможные значения переменной.
в конфигурации хотя бы один раз в виде
charset_map, charset или
source_charset директивы.Для utf-8
, windows-1251
и koi8-r
charsets, достаточно включить файлы conf / koi-win
, conf / koi-utf
и conf / win-utf
в конфигурацию.
Для других кодировок просто создание фиктивной таблицы преобразования работает,
Например:
charset_map iso-8859-5 _ {}
Кроме того, кодировку можно установить в Поле заголовка ответа «X-Accel-Charset». Эту возможность можно отключить с помощью proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headers, scgi_ignore_headers, а также grpc_ignore_headers директивы.
Синтаксис: | charset_map |
---|---|
По умолчанию: | — |
Контекст: | http |
Описывает таблицу преобразования из одной кодировки в другую.Таблица обратного преобразования строится с использованием тех же данных.
Коды символов даны в шестнадцатеричном формате.
Отсутствующие символы в диапазоне 80-FF заменяются на «?
».
При преобразовании из UTF-8 символы отсутствуют в однобайтовой кодировке
заменяются на « & # XXXX;
».
Пример:
charset_map koi8-r windows-1251 { C0 FE; # маленький ю C1 E0; # маленький а C2 E1; # маленький б C3 F6; # small ts . .. }
При описании таблицы преобразования в UTF-8 коды для кодировки UTF-8 должны быть приведенным во втором столбце, например:
charset_map koi8-r utf-8 { C0 D18E; # маленький ю C1 D0B0; # маленький а C2 D0B1; # маленький б C3 D186; # small ts ... }
Полные таблицы преобразования с koi8-r
на windows-1251
, а от koi8-r
и окна-1251
до utf-8
представлены в файлах раздачи conf / koi-win
, conf / koi-utf
и conf / win-utf
.
Синтаксис: | charset_types |
---|---|
По умолчанию: | charset_types текст / HTML-текст / XML-текст / обычный текст / vnd.wap.wml приложение / javascript приложение / rss + xml; |
Контекст: | http , сервер , расположение |
Эта директива появилась в версии 0.7.9.
Включает обработку модуля в ответах с указанными типами MIME
в дополнение к « text / html
».
Специальное значение « *
» соответствует любому типу MIME (0.8.29).
До версии 1.5.4 использовалось «application / x-javascript
». в качестве типа MIME по умолчанию вместо «application / javascript
».
Синтаксис: | override_charset |
---|---|
По умолчанию: | override_charset off; |
Контекст: | http , server , location , if in location |
Определяет, нужно ли выполнять преобразование ответов получено от прокси-сервера или сервера FastCGI / uwsgi / SCGI / gRPC когда ответы уже содержат кодировку в «Content-Type» поле заголовка ответа.Если преобразование включено, кодировка указана в полученном ответ используется как кодировка источника.
Следует отметить, что если ответ получен в подзапросе
затем преобразование из кодировки ответа в кодировку основного запроса
выполняется всегда, независимо от значения override_charset
установка директивы.
Синтаксис: | source_charset |
---|---|
По умолчанию: | — |
Контекст: | http , server , location , if in location |
Определяет исходную кодировку ответа.Если эта кодировка отличается от указанной в директиве charset выполняется преобразование.
ascii (
нить
) | int | ASCII код первого байта аргумента | ascii (‘х’) | 120 |
btrim (
нить
текст
[
,
символы
текст ]) | текст | Удалите самую длинную строку, состоящую только из символов в символы (по умолчанию пробел) от начала и до конца нить | btrim (‘xyxtrimyyx’, ‘ху’) | отделка |
chr (
int
) | текст | Персонаж с данным ASCII код | chr (65) | А |
конвертировать (
нить
текст
, [ src_encoding
название
,
]
dest_encoding
название
) | текст | Преобразовать строку в dest_encoding .Исходная кодировка определяется src_encoding . Если src_encoding опущен, предполагается кодировка базы данных. | convert (‘text_in_utf8’, ‘UTF8’, ‘LATIN1’) | text_in_utf8 представлен в ISO 8859-1, кодировка |
декодировать (
нить
текст
,
тип
текст
) | байт | Декодировать двоичные данные из
нить
ранее закодировано с помощью кодировать .Тип параметра такой же, как в кодировать . | декодировать (‘MTIzAAE =’, ‘base64’) | 123 \ 000 \ 001 |
кодировать (
данные
байт
,
тип
текст
) | текст | Кодируйте двоичные данные в другое представление. Поддерживаемые типы: base64 , шестнадцатеричный , побег . Побег просто выводит нулевые байты как \ 000 и удваивает обратную косую черту. | кодировать (E’123 \\ 000 \\ 001 ‘,’ base64 ‘) | MTIzAAE = |
initcap (
нить
) | текст | Преобразуйте первую букву каждого слова в верхний регистр, а остальные — в нижний.Слова представляют собой последовательности буквенно-цифровых символов, разделенных не буквенно-цифровыми символами. | initcap (‘привет, ТОМАС’) | Привет Томас |
длина (
нить
) | int | Количество знаков в нить | длина (‘хосе’) | 4 |
lpad (
нить
текст
,
длина
int
[
,
наполнять
текст ]) | текст | Заполните нить по длине длина добавляя символы наполнять (по умолчанию пробел).Если нить уже длиннее, чем длина затем он усекается (справа). | lpad (‘привет’, 5, ‘ху’) | xyxhi |
ltrim (
нить
текст
[
,
символы
текст ]) | текст | Удалите самую длинную строку, содержащую только символы из символы (по умолчанию пробел) от начала нить | ltrim (‘zzzytrim’, ‘xyz’) | отделка |
md5 (
нить
) | текст | Вычисляет хэш MD5 для нить , возвращая результат в шестнадцатеричном формате | md5 (‘abc’) | |
pg_client_encoding () | название | Текущее имя кодировки клиента | pg_client_encoding () | SQL_ASCII |
quote_ident (
нить
) | текст | Вернуть данную строку в кавычках для использования в качестве идентификатора в SQL строка оператора.Кавычки добавляются только в случае необходимости (т. Е. Если строка содержит символы, не являющиеся идентификаторами, или если она будет складываться по регистру). Встроенные кавычки правильно удвоены. | quote_ident (‘Foo bar’) | «Foo bar» |
quote_literal (
нить
) | текст | Вернуть заданную строку в кавычках для использования в качестве строкового литерала в SQL строка оператора. Встроенные одинарные кавычки и обратная косая черта правильно удваиваются. | quote_literal (‘О \’ Рейли ‘) | ‘О»Рейли’ |
regexp_replace (
нить
текст
,
шаблон
текст
,
замена
текст
[,
флаги
текст
]) | текст | Заменить подстроку, соответствующую регулярному выражению POSIX. Видеть Раздел 9.7 для получения дополнительной информации о сопоставлении с образцом. | regexp_replace (‘Томас’, ‘. [mN] a.’, ‘M’) | ThM |
повторить (
нить
текст
,
номер
int
) | текст | Повторить нить указанный номер раз | повторить (‘Pg’, 4) | PgPgPgPg |
заменить (
нить
текст
,
из
текст
,
к
текст
) | текст | Заменить все вхождения в нить подстроки из с подстрокой к | replace (‘abcdefabcdef’, ‘cd’, ‘XX’) | abXXefabXXef |
rpad (
нить
текст
,
длина
int
[
,
наполнять
текст ]) | текст | Заполните нить по длине длина добавляя символы наполнять (по умолчанию пробел).Если нить уже длиннее, чем длина затем он усекается. | rpad (‘привет’, 5, ‘ху’) | хиксикс |
rtrim (
нить
текст
[
,
символы
текст ]) | текст | Удалите самую длинную строку, содержащую только символы из символы (по умолчанию пробел) от конца нить | rtrim (‘trimxxxx’, ‘х’) | отделка |
split_part (
нить
текст
,
разделитель
текст
,
поле
int
) | текст | Расколоть нить на разделитель и вернуть заданное поле (считая от единицы) | split_part (‘abc ~ @ ~ def ~ @ ~ ghi’, ‘~ @ ~’, 2) | def |
strpos (
нить
,
подстрока
) | int | Расположение указанной подстроки (то же, что и должность( подстрока в нить ) , но обратите внимание на обратный порядок аргументов) | strpos (‘высокий’, ‘ig’) | 2 |
substr (
нить
,
из
[
,
считать ]) | текст | Извлечь подстроку (аналогично подстрока ( нить из из для считать ) ) | substr (‘алфавит’; 3, 2) | ph |
to_ascii (
нить
текст
[
,
кодирование
текст ]) | текст | Перерабатывать нить к ASCII из другой кодировки (поддерживает только преобразование из LATIN1 , LATIN2 , ЛАТИНСКИЙ 9 , а также WIN1250 кодировки) | to_ascii (‘Карел’) | Карел |
to_hex (
номер
int
или же
Bigint
) | текст | Перерабатывать номер в его эквивалентное шестнадцатеричное представление | to_hex (2147483647) | 7fffffff |
перевести (
нить
текст
,
из
текст
,
к
текст
) | текст | Любой персонаж в нить что соответствует символу в из заменяется соответствующим символом в к набор | translate (‘12345′, ’14’, ‘топор’) | a23x5 |
10.10 поддерживаемых наборов символов и сопоставления
10.10 Поддерживаемые наборы символов и сопоставления
В этом разделе указано, какие наборы символов поддерживает MySQL. Там — один подраздел для каждой группы связанных наборов символов. Для для каждого набора символов перечислены допустимые сопоставления.
Чтобы перечислить доступные наборы символов и их сопоставления по умолчанию,
используйте SHOW CHARACTER SET
оператор или запросите INFORMATION_SCHEMA
CHARACTER_SETS
таблица.Например:
mysql> ПОКАЗАТЬ НАБОР СИМВОЛОВ;
+ ---------- + --------------------------------- + ---- ----------------- + -------- +
| Кодировка | Описание | Сортировка по умолчанию | Макслен |
+ ---------- + --------------------------------- + ---- ----------------- + -------- +
| armcii8 | ARMSCII-8 Армянский | armcii8_general_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| big5 | Big5 Традиционный китайский | big5_chinese_ci | 2 |
| двоичный | Двоичная псевдокартина | двоичный | 1 |
| cp1250 | Окна Центральноевропейская | cp1250_general_ci | 1 |
| cp1251 | Windows кириллица | cp1251_general_ci | 1 |
| cp1256 | Windows арабский | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| cp850 | ДОС Западноевропейская | cp850_general_ci | 1 |
| cp852 | DOS Центральноевропейская | cp852_general_ci | 1 |
| cp866 | DOS Русский | cp866_general_ci | 1 |
| cp932 | SJIS для Windows Японский | cp932_japanese_ci | 2 |
| dec8 | DEC Западноевропейский | dec8_swedish_ci | 1 |
| eucjpms | UJIS для Windows Японский | eucjpms_japanese_ci | 3 |
| euckr | EUC-KR Корейский | euckr_korean_ci | 2 |
| gb18030 | Национальный стандарт Китая GB18030 | gb18030_chinese_ci | 4 |
| gb2312 | GB2312 Упрощенный китайский | gb2312_chinese_ci | 2 |
| gbk | GBK (упрощенный китайский) | gbk_chinese_ci | 2 |
| geostd8 | GEOSTD8 Грузинский | geostd8_general_ci | 1 |
| греческий | ISO 8859-7 Греческий | greek_general_ci | 1 |
| иврит | ISO 8859-8 Еврейский | hebrew_general_ci | 1 |
| hp8 | HP в Западной Европе | hp8_english_ci | 1 |
| keybcs2 | DOS Kamenicky чешско-словацкий | keybcs2_general_ci | 1 |
| koi8r | КОИ8-Р Релком Русские | koi8r_general_ci | 1 |
| koi8u | КОИ8-У Украинский | koi8u_general_ci | 1 |
| latin1 | cp1252 Западноевропейский | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Центральноевропейский | latin2_general_ci | 1 |
| latin5 | ISO 8859-9 Турецкий | latin5_turkish_ci | 1 |
| latin7 | ISO 8859-13 Балтика | latin7_general_ci | 1 |
| macce | Mac Центральноевропейский | macce_general_ci | 1 |
| макроман | Mac западноевропейский | macroman_general_ci | 1 |
| sjis | Shift-JIS Японский | sjis_japanese_ci | 2 |
| swe7 | 7bit шведский | swe7_swedish_ci | 1 |
| tis620 | TIS620 Тайский | tis620_thai_ci | 1 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| уджи | EUC-JP Японский | ujis_japanese_ci | 3 |
| utf16 | Юникод UTF-16 | utf16_general_ci | 4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| utf8 | Юникод UTF-8 | utf8_general_ci | 3 |
| utf8mb4 | Юникод UTF-8 | utf8mb4_0900_ai_ci | 4 |
+ ---------- + --------------------------------- + ---- ----------------- + -------- +
В случаях, когда набор символов имеет несколько сопоставлений, он может не ясно, какое сопоставление наиболее подходит для данного заявление.Чтобы избежать неправильного выбора параметров сортировки, его можно полезно для сравнения с репрезентативными данными значения, чтобы убедиться, что данное сопоставление сортирует значения таким образом вы ожидаете.
BIG5 | не поддерживается как серверная кодировка |
EUC_CN | EUC_CN, MULE_INTERNAL, UTF8 |
EUC_JP | EUC_JP, MULE_INTERNAL, SJIS, UTF8 |
EUC_KR | EUC_KR, MULE_INTERNAL, UTF8 |
EUC_TW | EUC_TW, BIG5, MULE_INTERNAL, UTF8 |
ГБ18030 | не поддерживается как серверная кодировка |
ГБК | не поддерживается как серверная кодировка |
ISO_8859_5 | ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866, WIN1251 |
ISO_8859_6 | ISO_8859_6, UTF8 |
ISO_8859_7 | ISO_8859_7, UTF8 |
ISO_8859_8 | ISO_8859_8, UTF8 |
JOHAB | JOHAB, UTF8 |
КОИ8 | KOI8, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251 |
LATIN1 | LATIN1, MULE_INTERNAL, UTF8 |
ЛАТИН 2 | LATIN2, MULE_INTERNAL, UTF8, WIN1250 |
LATIN3 | LATIN3, MULE_INTERNAL, UTF8 |
ЛАТИН 4 | LATIN4, MULE_INTERNAL, UTF8 |
LATIN5 | LATIN5, UTF8 |
LATIN6 | LATIN6, UTF8 |
LATIN7 | LATIN7, UTF8 |
LATIN8 | LATIN8, UTF8 |
ЛАТИН 9 | LATIN9, UTF8 |
LATIN10 | LATIN10, UTF8 |
MULE_INTERNAL | MULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8, от LATIN1 до LATIN4, SJIS, WIN866, WIN1250, WIN1251 |
SJIS | не поддерживается как серверная кодировка |
SQL_ASCII | не поддерживается как серверная кодировка |
UHC | не поддерживается как серверная кодировка |
UTF8 | все поддерживаемые кодировки |
WIN866 | WIN866 |
ISO_8859_5 | KOI8, MULE_INTERNAL, UTF8, WIN1251 |
WIN874 | WIN874, UTF8 |
WIN1250 | WIN1250, LATIN2, MULE_INTERNAL, UTF8 |
WIN1251 | WIN1251, ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866 |
WIN1252 | WIN1252, UTF8 |
WIN1253 | WIN1253, UTF8 |
WIN1254 | WIN1254, UTF8 |
WIN1255 | WIN1255, UTF8 |
WIN1256 | WIN1256, UTF8 |
WIN1257 | WIN1257, UTF8 |
WIN1258 | WIN1258, UTF8 |
Кодирование в MySQL | ISPserver
Кодировка MySQL
Проблемы с кодировкой MySQL могут возникнуть для версий 4.1 и более поздних версий, поскольку у них есть возможность устанавливать различную кодировку для разных уровней иерархии базы данных (сервер, база данных, таблица, столбец) и для отдельных соединений между сервером и клиентом. MySQL имеет кодировку latin1 по умолчанию на всех уровнях.
Кодировка, включая данные на сервере MySQL, должна соответствовать кодировке самих данных. Например, для русских символов используется кодировка cp1251. Если в таблице есть записи с русскими символами, кодировка таблицы должна быть установлена как cp1251, иначе вместо русских символов будут отображаться вопросительные знаки или другие символы.
При создании базы данных укажите кодировку для хранения символов сразу, иначе будет использоваться значение по умолчанию (latin1). Например, создайте базу данных с помощью команды:
создать базу данных `my-db` кодировку по умолчанию cp1251;
Кодировка соединения сервера с клиентом определяет формат данных, которые будут передаваться между двумя объектами. Например, если в сценарии веб-сайта используются русские символы, MySQL должен правильно распознавать символы, когда веб-сайт обращается к базе данных, для правильного выполнения сценария.Если в кодировке соединения используется latin1 по умолчанию, сервер не сможет правильно распознать русские символы, и скрипт выдаст ошибку.
Установите желаемую кодировку подключения сразу после подключения к серверу MySQL, используя следующий запрос:
установить имена cp1251
Есть ряд клиентов, которые не могут установить необходимую кодировку и поэтому используют свои собственные. В таких случаях укажите в файле my.cnf в разделе [mysqld] следующую строку:
set init_connect = "установить имена cp1251" где cp1251 - необходимое кодирование.
В этом случае сервер запустит команду «set names cp1251» сразу после подключения к клиенту и установит кодировку, указанную в запросе.
Наиболее распространенные русские кодировки следующие:
utf8, cp866 (DOS), cp1251 (Windows), koi8r
Установка и использование одинаковой кодировки для серверов баз данных на всех уровнях помогает устранить 90% проблем с кодировкой в MySQL.