Фотографии с использованием Postgres и Xojo

Я преобразовал из базы данных MySQL в Postgres. Во время преобразования столбец изображения в Postgres был создан как bytea.

Этот код Xojo работает в MySQL, но не в Postgres.

Dim mImage as Picture

mImage = rs.Field("Picture").PictureValue

Есть идеи?

1 ответ

Я не знаю об этой конкретной проблеме, но вот что вы можете сделать, чтобы узнать себя, возможно:

Изображения хранятся в виде больших двоичных объектов в базе данных. Теперь это означает, что столбец также должен быть объявлен как BLOB (или аналогичный двоичный тип). Если он был случайно помечен как TEXT, это будет работать до тех пор, пока база данных не будет экспортирована другими способами. То есть, пока только ваш код Xojo читает и записывает в запись, используя функции PictureValue, которые заботятся о сохранении данных в BLOB-форме. Но если вы затем преобразуете в другую базу данных, данные BLOB будут считываться как текст, и в этом процессе они могут искажаться.

Так что может быть уместно сообщить нам, как вы конвертировали БД. Вы выполняли экспорт как команды SQL, а затем импортировали его в Postgres, выполнив эти команды снова? У вас еще есть файл экспорта? Если это так, найдите запись с данными изображения и посмотрите, начинается ли эти данные с: x', а затем содержит шестнадцатеричный байт-код, например, x'45FE1200... и так далее. Если это не так, это еще один показатель для моего подозрения.

Итак, сначала проверьте тип столбца Picture в вашей старой БД. Если это указывает на двоичный тип данных, то вышеупомянутое, вероятно, не применяется.

Далее вы можете посмотреть на двоичные данные, которые Xojo читает. Чтобы сделать это, получите BlobValue вместо PictureValue и сохраните его в MemoryBlock. Сделайте то же самое для одной картинки, как со старой, так и с новой базой данных. Блок памяти должен содержать те же байты. Если нет, это предполагает, что данные не были переданы правильно. Зачем? Ну, это зависит от того, как вы это преобразовали.

Другие вопросы по тегам