powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / CLI в Windows. CP1251 и CP866 различие?
5 сообщений из 5, страница 1 из 1
CLI в Windows. CP1251 и CP866 различие?
    #39818843
PowRTocH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему когда я вставляю кириллические буквы в столбец с кодировкой 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
CLI в Windows. CP1251 и CP866 различие?
    #39818859
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET NAMES устанавливает, в какой кодировке поступают данные от клиента (из какой кодировки конвертировать в требуемую для поля) и в какой кодировке следует отдавать клиенту данные (в какую кодировку конвертировать данные перед отправкой).

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

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

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


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