0

我正在从我的 MySQL 数据库中获取一些二进制数据。它以 mysqlpp::sql_blob 类型出现。

恰好这个 BLOB 是一个序列化的 Google Protobuf。我需要对其进行反序列化,以便我可以正常访问它。

这会产生编译错误,因为 ParseFromString() 不适用于 mysqlpp:sql_blob 类型:

protobuf.ParseFromString( record.data );

但是,如果我强制转换,它可以编译:

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

这安全吗?由于 mysqlpp 文档中的这个片段,我特别担心:

“因为 C++ 字符串可以很好地处理二进制数据,您可能认为可以使用 std::string 代替 sql_blob,但当前的 String 设计通过 C 字符串转换为 std::string。结果,BLOB 数据被截断在填充 SSQLS 期间第一个嵌入的空字符。如果不完全重新设计 String 或 SSQLS 机制,就无法解决这个问题。

感谢你的协助!

4

1 回答 1

1

从那个引用来看,这看起来不是问题(它基本上是说如果在 blob 中找到一个空字符,它将在那里停止字符串,但是 ASCII 字符串中间不会有随机空值) . 但是,这可能会给内部化带来问题(多字节字符集中间可能有空值)。

于 2009-10-09T01:19:26.647 回答