Тема: Проблема з PSQL Shell

Виконуючи завдання я створив декілька таблиць через shell, які мені треба заповнити, деякі дані написані кирилицею. Я знайшов, що для того, щоб кирилиця адекватно відображалась мені треба змінити кодування за допомогою ось цієї команди cmd.exe /c chcp 1252. Кодування змінюється, але все одно при витягу інформації з таблиць у мене виводиться " character with byte sequence 0xd0 0x9f in encoding "UTF8" has no equivalent in encoding "WIN1252" ". Як мені це вирішити?

2

Re: Проблема з PSQL Shell

Copilot

This error occurs when you're trying to convert or use data from a UTF-8 encoded database in a WIN1252 encoded database. The byte sequence 0xd0 0x9f represents a character in UTF-8 that doesn't have an equivalent in WIN1252.

To fix this issue, you can try one of the following solutions:

Change the client encoding to UTF-8. You can do this by running the following command in the PSQL shell:

SET CLIENT_ENCODING TO 'UTF8';

If you have control over the database, consider changing the database encoding to UTF-8. This is the most flexible encoding as it supports all Unicode characters. However, this might not be possible if you have existing data that is not compatible with UTF-8.

If you're importing data, ensure that the data is in WIN1252 encoding before importing it into the database. You can use a tool like iconv to convert the data file to WIN1252 encoding:

iconv -f UTF-8 -t WIN1252//TRANSLIT inputfile -o outputfile

This command converts inputfile from UTF-8 to WIN1252 encoding, replacing any characters that don't have an equivalent in WIN1252 with a similar character. The converted data is written to outputfile.

Remember to backup your data before making any changes to the encoding.

3

Re: Проблема з PSQL Shell

При зміні кодування  SET CLIENT_ENCODING TO 'UTF8'; замість кирилиці виводяться незрозумілі символи

4

Re: Проблема з PSQL Shell

Спробуйте кодову сторінку 65001, це UTF-8.
А взагалі потрібно всі налаштування дивитися, і що там безпосередньо в таблиці. Просто пошукати в мережі недостатньо, щоб розібратися у вашій конкретній ситуації (а 1252 - це дуже давній стандарт).

5

Re: Проблема з PSQL Shell

Коли я ставлю UTF-8 то виводяться ієрогліфи

6 Востаннє редагувалося koala (28.12.2023 13:42:58)

Re: Проблема з PSQL Shell

Боюся, вам доведеться перейти від загальних описів до конкретних дій, інакше ми не допоможемо ніяк.

artur.vyklynets.22 написав:

Коли я ставлю UTF-8

як саме? Якою командою? В якій програмі?

artur.vyklynets.22 написав:

то виводяться ієрогліфи

які саме? Можете сюди скопіювати?

У вас проблема в тому, що є набір байтів у БД, який БД розглядає як текст в одному кодуванні (і, можливо, перекодовує при запиті), а засіб відображення (консоль) - як текст в іншому кодуванні (і теж перекодовує при виведенні). Тобто у вас 3 місця, де можна "виставити UTF-8", і ще більше способів, якими це можна зробити. Тому загальні описи не допомагають.

Подякували: leofun011

7

Re: Проблема з PSQL Shell

Ось  Маршрутка

8

Re: Проблема з PSQL Shell

це виводиться коли я прописую запит buses=# set client_encoding="UTF-8";
SET
buses=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)


buses=# select * from ticketprices
buses-# select * from ticketprices;
ÐYÐzÐoÐ~Ð>ÐsÐ?:  Ñ?инÑ'акÑ?иÑ╬на помилка в або поблизу "select"
LINE 2: select * from ticketprices;
        ^
buses=# select * from ticketprices;
price_id |  price  | type_vehicle
----------+---------+--------------
        3 | 10,00 ? | ð£ð░ÐÇÐêÐÇÐâÐéð║ð░
(1 row)
Програма Sql Shell

9

Re: Проблема з PSQL Shell

Ага. Тобто ви прописуєте СУБД в sql shell, що клієнту потрібен UTF-8. Припустимо тепер, що в базі теж зберігається UTF-8 (не факт, але можна припустити, принаймні схоже на те). А у клієнта (тобто оболонки) яке кодування? 1251? 1252 (яке узагалі не кириличне)?

chcp 65001

в cmd.exe виконайте, а потім під'єднайтеся до СУБД в sql shell і зробіть запит.

10

Re: Проблема з PSQL Shell

Ось psql (16.1)
WARNING: Console code page (65001) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

buses=# select * from ticketprices;
ERROR:  character with byte sequence 0xd0 0x9f in encoding "UTF8" has no equivalent in encoding "WIN1252"

11

Re: Проблема з PSQL Shell

А якщо обидва - і chch 65001 в консолі, і set client_encoding="UTF-8" в psql shell?
Якщо не пройде, спробуйте ще кодову сторінку 1251, це кирилиця. Але краще, щоб перше вийшло.

12

Re: Проблема з PSQL Shell

ДЯКУЮ, спрацювало типу виводить дані з бази правильно, але чому в консолі наприклад коли помилка якась, що я не так ввів запит все рівно є ієрогліфи? Ось приклад "ПОМИЛКÐ:  ÑинтакÑична помилка в або поблизу "select" ". І ще одне питання у мене є тип поля MONEY в базі, мені треба для нього вказати ціну проїзду, як мені записати це в поле, я записав як 10,00 але в мене чомусь додався знак ? і вийшло "10,00 ?"

13

Re: Проблема з PSQL Shell

Що саме спрацювало? Ви весь час недоговорюєте.
Судячи з https://www.postgresql.org/message-id/Pine.LNX.4.44.0309101918400.1141-100000@peter.localdomain - таки буде проблема, там радять однакові кодування для повідомлень і таблиць тримати. А яке кодування таблиці? Можете

psql -l

зробити і поле Ctype глянути?
Знак "?" - швидше за все, відсутній у шрифті вашої консолі символ. Мишкою клікаєте меню (в лівому верхньому куті) - властивості і обираєте щось інше, наприклад, consolas.