質問

私は、MySQLデータベースのうち、いくつかのバイナリデータをつかみました。それはmysqlpp :: SQL_BLOB型として出てきます。

ちょうどので、このBLOBは、シリアライズグーグルいるProtobufであることを起こります。私は通常それにアクセスできるように、私はそれをデシリアライズする必要があります。

ParseFromString()がmysqlppのために意図されていないので、これは、コンパイルエラーを与える:SQL_BLOBタイプ:

protobuf.ParseFromString( record.data );
私はキャストを強制する場合は、

しかし、それはOKコンパイルします:

protobuf.ParseFromString( (std::string) record.data );

これは安全ですか?私はmysqlppのドキュメントからこのために、スニペットのため、特に心配します:

は、「C ++の文字列は、単にバイナリデータを扱うので罰金、あなたが代わりにSQL_BLOBのはstd ::文字列を使用することができると思うかもしれませんが、文字列の現在の設計先はstd ::文字列をC文字列を経由して変換します。その結果、BLOBデータは、人口の間に第1の埋め込まれたNULL文字で切り捨てられSSQLSの。完全に文字列またはSSQLSメカニズムのいずれかを再設計することなくことを修正する方法はありません。」

あなたの助けをありがとう!

役に立ちましたか?

解決

それは引用によって判断し、問題になるようですが、見ていません(基本的にはしかし、ASCII文字列が途中でランダムなヌルを持っていないだろう、NULL文字がブロブに発見された場合、それはそこに文字列を停止しますと言っていますそのうちの)。しかし、これは(マルチバイト文字セットは途中でヌルを有していてもよい)の内在のための問題を提示することがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top