Pregunta

Estoy agarrando algunos datos binarios fuera de mi base de datos MySQL. Sale a la luz como un tipo mysqlpp :: SQL_BLOB.

Lo que pasa es que este es un BLOB serializado Google Protobuf. Necesito des-serializar para que pueda acceder a él con normalidad.

Esto da un error de compilación, ya parseFromString () no está destinado a mysqlpp: tipos SQL_BLOB:

protobuf.ParseFromString( record.data );

Sin embargo, si fuerzo al elenco, que compila Aceptar:

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

Es esto seguro? Estoy particularmente preocupado porque de este fragmento de la documentación mysqlpp:

"Debido a que C ++ cadenas manejan datos binarios solo bien, se podría pensar que puede utilizar std :: string en lugar de SQL_BLOB, pero el diseño actual de la cadena se convierte en std :: string a través de una cadena C. Como resultado de ello, los datos BLOB se trunca en el primer carácter nulo incrustado en la población de los SSQLS. no hay manera de arreglar eso sin tener que rediseñar por completo SERIE o el mecanismo SSQLS. "

Gracias por su ayuda!

¿Fue útil?

Solución

No parece que sería un problema a juzgar por esa cita (que es básicamente diciendo que si un carácter nulo se encuentra en la burbuja se detendrá la cadena de allí, sin embargo cadenas de caracteres ASCII no tendrán valores nulos al azar en el medio de ellos). Sin embargo, esto podría presentar un problema para la internalización (juegos de caracteres de varios bytes pueden tener valores nulos en el medio).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top