Миграция испортила коды символов UTF-8 в PostgreSQL JSON - PullRequest
0 голосов
/ 14 апреля 2020

После восстановления БД произошло нечто странное с кодами символов в столбцах JSONB. Теперь данные выглядят следующим образом:

{"town": "KARLSTAD", "county": {"code": "GR17", "name": "Värmland"}, "address": "Där Väster Snårstad 506", "country": {"code": "SE", "name": "Sweden"}, "postal_code": "65593", "municipality": {"code": "GK1780", "name": "Karlstad"}}

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

{"town": "KARLSTAD", "county": {"code": "GR17", "name": "Värmland"}, "address": "Där Väster Snårstad 506", "country": {"code": "SE", "name": "Sweden"}, "postal_code": "65593", "municipality": {"code": "GK1780", "name": "Karlstad"}}

Кажется, что коды согласуются, поскольку Swedi sh ä всегда ä (гекс: C3 83 C2 A4). å является шестнадцатеричным: C3 83 C2 A5 и ö является шестнадцатеричным: C3 83 C2 B6 ...

Есть ли способ 1) заменить все экземпляры "безопасно", чтобы восстановить истинные символы из проваленные и 2) выяснить, почему это произошло и влияет только на столбцы JSONB?

1 Ответ

0 голосов
/ 15 апреля 2020

Ну, вопрос № 1, который я выяснил:

update supplier set visiting_address = replace(visiting_address::text, 'ö', 'ö')::jsonb;
update supplier set visiting_address = replace(visiting_address::text, 'ä', 'ä')::jsonb;
update supplier set visiting_address = replace(visiting_address::text, 'Ã¥', 'å')::jsonb;
update supplier set visiting_address = replace(visiting_address::text, 'Ö', 'Ö')::jsonb;
update supplier set visiting_address = replace(visiting_address::text, 'Ä', 'Ä')::jsonb;
update supplier set visiting_address = replace(visiting_address::text, 'Ã…', 'Å')::jsonb;
update supplier set visiting_address = replace(visiting_address::text, 'é', 'é')::jsonb;

Я экспортировал таблицу как SQL и ищу Ã (hex: C3), чтобы найти также несколько других, например ü, õ, который также выходит за пределы 127 таблиц ASCII ...

Вопрос №2 все еще очень интересен, почему это произошло?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...