Безопасно ли конвертировать mysqlpp :: sql_blob в std :: string? - PullRequest
0 голосов
/ 09 октября 2009

Я собираю некоторые двоичные данные из моей базы данных 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 преобразуется в std :: string через строку C. В результате данные BLOB усекаются по первому внедренному нулевому символу при заполнении SSQLS. Исправить это невозможно без полного изменения структуры String или механизма SSQLS. "

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 09 октября 2009

Не похоже, что это будет проблемой, если судить по этой цитате (в основном это говорит, что если в BLOB-объекте найден нулевой символ, он остановит строку там, однако строки ASCII не будут иметь случайные нули в середине из них). Однако это может представлять проблему для интернализации (многобайтовые кодировки могут иметь нулевые значения в середине).

...