Ошибка при импорте некоторых данных PostgreSQL через PHP - PullRequest
1 голос
/ 20 июля 2011

Я пытаюсь импортировать некоторые данные из группы таблиц в базе данных PostgreSQL в другую группу таблиц в другой базе данных PostgreSQL.Для импорта я использую PHP, потому что мне нужно выполнить некоторые манипуляции с данными, прежде чем вставлять их в новую базу данных.

Все прошло нормально до некоторой точки, где есть текст, содержащий одинарные кавычки.Я пытался избежать этих кавычек перед вставкой данных, и я получаю эту ошибку:

ОШИБКА: недопустимая последовательность байтов для кодирования "UTF8": 0x96 СОВЕТ: эта ошибка также может произойти, если последовательность байтов несоответствует кодировке, ожидаемой сервером, который управляется «client_encoding».

Кодировка в старой базе данных - SQL_ASCII, в то время как в новой базе данных у меня UTF8.

Какя могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Возможно, в вашей старой базе данных есть какой-то текст в кодировке Windows-1252 (в этой кодировке кодируется 0x96 EN DASH).

Когда кодировка сервера SQL_ASCII, PostgreSQL не выполняет преобразование или проверку кодировки; он просто хранит и извлекает текст, как вы его дали. Если бы ваша старая база данных использовала UTF8, у вас не было бы этой проблемы. Да, а то и сто.

Есть большая вероятность, что весь ваш текст находится в WIN1252, но возможно, что есть смесь кодировок. Самое простое, что можно сделать, это предположить первое и установить кодировку клиента в WIN1252 в вашем скрипте миграции:

pg_set_client_encoding($new_database, 'WIN1252');

Важно, чтобы вы установили это при подключении к новой базе данных. Postgres сообщает, что поступает текст в кодировке Windows 1252, и Postgres необходимо преобразовать его в UTF-8.

Обратите внимание, что если в старой базе данных есть какой-либо текст в кодировке UTF-8, он либо выдаст ошибку, либо станет mojibake , если вы сделаете это.

0 голосов
/ 20 июля 2011

Использовать pg_escape_string() при вставке в базу данных

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