Question

Je suis preneuse des données binaires de ma base de données MySQL. Il apparaît comme un type mysqlpp :: sql_blob.

Il se trouve que ce blob est un sérialisé Google Protobuf. Je dois désérialiser pour que je puisse accéder normalement.

Cela donne une erreur de compilation, puisque parseFromString () ne vise pas à mysqlpp: types de sql_blob:

protobuf.ParseFromString( record.data );

Cependant, si je force le casting, il compile OK:

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

Est-ce sûr? Je suis particulièrement inquiet à cause de cet extrait de la documentation mysqlpp:

"Parce que gérer les données binaires chaînes C ++ seulement bien, vous pourriez penser que vous pouvez utiliser std :: string au lieu de sql_blob, mais la conception actuelle de chaîne convertit en std :: string via une chaîne C. en conséquence, les données BLOB est tronquée au premier caractère nul incorporé pendant la population des SSQLS. Il n'y a aucun moyen de résoudre ce problème sans reconcevoir complètement soit chaîne ou le mécanisme SSQLS. "

Merci pour votre aide!

Était-ce utile?

La solution

Il ne semble pas que ce serait un problème à en juger par cette citation (il est essentiellement dire si un caractère nul se trouve dans le blob, il arrêtera la chaîne là-bas, mais les chaînes ASCII seront pas nuls au hasard au milieu d'eux). Cependant, cela pourrait présenter un problème pour intériorisation (multi-octets charsets peuvent avoir des valeurs nulles au milieu).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top