将mysqlpp :: sql_blob转换为std :: string是否安全?

时间:2009-10-09 00:44:38

标签: blob protocol-buffers binary-data mysqlpp

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

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

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

protobuf.ParseFromString( record.data );

但是,如果我强制演员,它编译好了:

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

这样安全吗?我特别担心因为mysqlpp文档中的这个片段:

"Because C++ strings handle binary data just fine, you might think you can use std::string instead of sql_blob, but the current design of String converts to std::string via a C string. As a result, the BLOB data is truncated at the first embedded null character during population of the SSQLS. There’s no way to fix that without completely redesigning either String or the SSQLS mechanism."

感谢您的协助!

1 个答案:

答案 0 :(得分:1)

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