Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / CLI в Windows. CP1251 и CP866 различие? / 5 сообщений из 5, страница 1 из 1
27.05.2019, 15:31
    #39818843
PowRTocH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLI в Windows. CP1251 и CP866 различие?
Почему когда я вставляю кириллические буквы в столбец с кодировкой utf8, если:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET NAMES cp1251  # (по умолчанию)
INSERT INTO tab1 VALUES('a'),('z'),('а'),('я');
SELECT a, HEX(a) FROM tab1
+------+--------+
| a      | HEX(x) |
+------+--------+
| a      |   61   |
| z      |   7A   |
| а      | C2A0   |
| я      | D0BF   |
+------+--------+



Коды 2-х байтовых кириллических символов не соответствуют таблице UTF8!

Должно быть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
+------+--------+
| a      | HEX(x) |
+------+--------+
| a      |   61   |
| z      |   7A   |
| а      | D0B0   |
| я      | D18F   |
+------+--------+



При SET NAMES cp866 символы заносятся в столбец с правильными кодами.

Почему CP1251 меняет коды букв кириллицы несмотря на выставленную кодировку столбца utf8?
...
Рейтинг: 0 / 0
27.05.2019, 16:01
    #39818859
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLI в Windows. CP1251 и CP866 различие?
SET NAMES устанавливает, в какой кодировке поступают данные от клиента (из какой кодировки конвертировать в требуемую для поля) и в какой кодировке следует отдавать клиенту данные (в какую кодировку конвертировать данные перед отправкой).

Если у тебя "При SET NAMES cp866 символы заносятся в столбец с правильными кодами." - значит, у твоего консольного клиента текущая кодировка CP866. И при перекодировании информации от клиента в UTF8 получаются верные коды. А если данные, пришедшие от клиента в 866, пробовать перекодировать, словно они в 1251, ясен пень в таблицу ляжет ерунда.

Твоё счастье, что неверное преобразование в твоём случае - обратимо. Поэтому консольный клиент отображает таки кириллицу. Если бы сочетание кодировок оказалось таким, что прямое и последующее обратное преобразования не были комплементары, глазеть бы тебе на крокозяблы или на знаки вопроса...
...
Рейтинг: 0 / 0
27.05.2019, 17:26
    #39818913
PowRTocH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLI в Windows. CP1251 и CP866 различие?
авторзначит, у твоего консольного клиента текущая кодировка CP866

А почему тогда если не прописывать никакие SET NAMES со старта сессии, то клиентом (windows terminal) по умолчанию выбирается именно CP1251?
...
Рейтинг: 0 / 0
27.05.2019, 18:21
    #39818933
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLI в Windows. CP1251 и CP866 различие?
Возможно, в конфиге прописано такое дефолтовое значение. Или в переменных окружения оно присутствует.
...
Рейтинг: 0 / 0
28.05.2019, 13:50
    #39819286
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLI в Windows. CP1251 и CP866 различие?
PowRTocHА почему тогда если не прописывать никакие SET NAMES со старта сессии, то клиентом (windows terminal) по умолчанию выбирается именно CP1251?
Потому что эта глупая утилита не в состоянии получить текущую кодовую страницу ввода и считает ею ANSI.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / CLI в Windows. CP1251 и CP866 различие? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]