0

mysql データベースからバイトフィールドを持つ postgres テーブルに blob イメージ (jpeg) をコピーする必要があります。私はc ++を使用します..この方法でmysqlから画像を読み取ります

char* buffer = new char[res2->getInt(1)];
memset(buffer, '\0', res2->getInt(1));
(res->getBlob("att"))->read(buffer,res2->getInt(1));

res2 には LENGHT(blob_field) が含まれます。ファイルにバッファを保存すると、画像が完全に表示されます。その後、postgresテーブルにバッファを書き込みます

const char* const paramValues[] = {buffer};
const int nParams = sizeof(paramValues) / sizeof(paramValues[0]);
const int paramLenghts[] = {buffer_size };
const int paramFormats[] = {1 }; /*binary */


PQexecParams(
             conn,
             "INSERT INTO images (img) VALUES($1::bytea)",
             nParams,
             NULL, /* Types of parameters, unused as casts will define types */
             paramValues,
             paramLenghts,
             paramFormats,
             0
         );

postgresテーブルのbyteaフィールドにデータがありますが、ファイルに手でコピーして貼り付けると、jpeg画像ではないと表示されているため画像が表示されません... postgres文字列はmysqlのものとは異なります(もし私がテキストエディタでmysqlを開きます)しかし、単純なコピーアンドペーストを行ったので理由がわかりません..何かヒントはありますか??

4

1 に答える 1

0

ほとんどの場合、エスケープが問題の原因です。Bytea は、テキスト モードまたはバイナリ モードで戻ることができます。テキスト モードの場合は、16 進数の文字列または 8 進数のエスケープ文字列が表示されます。この場合、PQunescapeBytea最初に実行する必要があります。

それが問題でない場合、次のステップは、データをどのように挿入したかを確認することです。誤って挿入した可能性があるため、データベース内のデータが破損しています。

于 2013-10-27T12:37:46.393 に答える