Безопасно ли преобразовывать mysqlpp::sql_blob в std::string?
-
20-09-2019 - |
Вопрос
Я беру некоторые двоичные данные из своей базы данных MySQL.Он выводится как тип mysqlpp::sql_blob.
Так уж получилось, что этот большой двоичный объект является сериализованным Google Protobuf.Мне нужно десериализовать его, чтобы я мог получить к нему обычный доступ.
Это приводит к ошибке компиляции, поскольку ParseFromString() не предназначен для типов mysqlpp:sql_blob:
protobuf.ParseFromString( record.data );
Однако, если я принудительно выполню приведение, оно скомпилируется нормально:
protobuf.ParseFromString( (std::string) record.data );
Это безопасно?Я особенно беспокоюсь из-за этого фрагмента из документации mysqlpp:
Спасибо за вашу помощь!
Решение
Судя по этой цитате, не похоже, что это было бы проблемой (по сути, это говорит о том, что если в большом двоичном объекте найден нулевой символ, он остановит строку там, однако строки ASCII не будут содержать случайных нулей в середине из них).Однако это может создать проблему для интернализации (многобайтовые кодировки могут содержать нули в середине).