Возможно, в вашей старой базе данных есть какой-то текст в кодировке 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 , если вы сделаете это.