문제

MySQL 데이터베이스에서 이진 데이터를 가져오고 있습니다. mysqlpp :: sql_blob 유형으로 나옵니다.

이 블로브는 직렬화 된 Google 프로토부프입니다. 정상적으로 액세스 할 수 있도록 해제해야합니다.

ParsefromString ()은 mysqlpp : sql_blob 유형에 대한 것이 아니기 때문에 컴파일 오류를 제공합니다.

protobuf.ParseFromString( record.data );

그러나 캐스트를 강요하면 OK를 컴파일합니다.

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

이것은 안전합니까? MySQLPP 문서 의이 스 니펫 때문에 특히 걱정됩니다.

"C ++ 문자열이 바이너리 데이터를 잘 처리하기 때문에 SQL_BLOB 대신 STD :: String을 사용할 수 있다고 생각할 수도 있지만 현재의 문자열 디자인은 C 문자열을 통해 std :: 문자열로 변환됩니다. 결과적으로 Blob 데이터가 잘립니다. SSQL의 모집단 동안 첫 번째 임베디드 널 문자에서 문자열이나 SSQLS 메커니즘을 완전히 재 설계하지 않고는이를 고칠 방법이 없습니다. "

도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

그것은 그 인용문으로 판단하는 데 문제가되지 않는 것처럼 보이지 않습니다 (기본적으로 널 문자가 블로브에서 발견되면 문자열을 멈출 것이지만 ASCII 스트링은 중간에 임의의 널이 없습니다). . 그러나 이것은 내재화에 문제가 될 수 있습니다 (멀티 바이트 숯이 중간에 널이있을 수 있음).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top