Pergunta

Estou pegando alguns dados binários do meu banco de dados MySQL. Ele sai como um tipo MySQLPP :: SQL_BLOB.

Acontece que esse blob é um Google Protobuf serializado. Preciso despertá-lo para poder acessá-lo normalmente.

Isso dá um erro de compilação, já que parsefromstring () não se destina a MySQLPP: SQL_BLOB TIPOS:

protobuf.ParseFromString( record.data );

No entanto, se eu forçar o elenco, ele compila OK:

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

Isso é seguro? Estou particularmente preocupado por causa deste trecho da documentação do MySQLPP:

"Como as strings C ++ lidam com dados binários bem, você pode pensar que pode usar STD :: String em vez de SQL_BLOB, mas o design atual da String converte para STD :: String através de uma string C. Como resultado, os dados do BLOB são truncados No primeiro caráter nulo incorporado durante a população do SSQLS. Não há como corrigir isso sem redesenhar completamente a string ou o mecanismo SSQLS ".

Obrigado pela ajuda!

Foi útil?

Solução

Não parece que seria um problema a julgar por essa citação (está basicamente dizendo se um personagem nulo for encontrado na bolha, ele parará a corda, no entanto, as cordas ASCII não terão nulos aleatórios no meio deles) . No entanto, isso pode apresentar um problema para a internalização (os charsets multibyte podem ter nulos no meio).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top