0

MySQL Connector/C++ を使用して、blob フィールドに格納されたいくつかの画像を読み取る必要があります。次のコードはうまく機能します

std::istream *blobIn;
char buffer[6750];
memset(buffer, '\0', 6750);
blobIn = res->getBlob("att");
blobIn->read((char*)buffer,6750);       
std::ofstream outfile ("foto.jpeg",std::ofstream::binary);
outfile.write (buffer,6750);
outfile.close();

画像のサイズが 6750 を超えることはできないことは承知していますが、現在のバイト サイズを知りたいので、次のようにします。

std::istream *blobIn;
char* buffer;
int size = getByteSizeFromBlob();
buffer = new char[size];
blobIn = res->getBlob("att");
blobIn->read((char*)buffer,size); 
....
delete buffer;

インターネット上の一部の人々は、この機能の使用を提案しています

SELECT OCTET_LENGTH('att') FROM table

また

SELECT LENGTH('att') FROM table

問題は、このクエリが結果として常に 3 を返すことですが、blob はたとえば 6110 バイトを返します。MySQL Workbench では、「エディタで値を開く」を選択すると正しいバイト サイズが表示されるので、C++ で対応するサイズを取得するにはどうすればよいですか??

4

1 に答える 1

0

正しい構文は次のとおりです。

SELECT OCTET_LENGTH(att) FROM table

フィールド名を一重引用符で囲んでバージョンで選択しているのは、明らかに常に3である文字列「att」のバイト長です:)

于 2013-06-26T10:27:53.000 に答える