2013-06-26 18 views
0

我必須從mysql數據庫複製斑點圖像(jpeg)到字段bytea的postgres表。 我用C++ ..我讀從MySQL圖像以這種方式從mysql複製blob到postgres進展不順利(我再也看不到圖像了)

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的)但我不明白爲什麼因爲我做了簡單的複製和粘貼。 任何提示? ?

+1

_postgres string_可能是bytea內容的文本表示。就像使用C++插入圖像一樣,使用C++將其提取到文件中,而不是從某些未指定的vizualization工具中複製/粘貼。 –

+0

我想過這種可能性..我用pgadmin ...用mysql工作臺,我可以看到桌面上的直接圖像,但pgadmin不提供這種東西,所以我嘗試這種方式..我會嘗試 – SUPERALEX

+0

@ DanielVérité我試圖用C++讀取並寫入一個文件,但圖像損壞..而內部的字符串正是我從pgadmin..plus看到的,我從postgres讀取的長度比我在mysql上讀取的長度長:bytea字段是19253字節長,原來是6728 – SUPERALEX

回答

0

最可能的逃逸是什麼導致你的問題。 Bytea可以以文本或二進制模式返回。如果是文本模式,您將看到一個十六進制字符串或八進制轉義字符串。在這種情況下,您需要先通過PQunescapeBytea運行它。

如果這不是問題,那麼下一步就是看你如何插入數據。有可能你插入的不正確,因此你的數據庫中的數據已損壞。