2014-11-03 2 views
6

BLOB로 저장되는 SQLite 테이블의 데이터 열이 있습니다. 특히 직렬화 된 POJO (Java 객체)입니다.blob 데이터를 sqlite3 콘솔에서 ASCII가있는 hexdump로보기

어느 쪽이든, 나는 종류의이 같은 헥스 덤프로 SQLite는 콘솔에서 볼 싶습니다

0000000000 |The correction f| 
0000000016 |or the aberratio| 
0000000032 |n of light is sa| 
0000000048 |id,.on high auth| 
0000000064 |ority, not to be| 
0000000080 | perfect even in| 
0000000096 | that most perfe| 
0000000112 |ct organ, the.ey| 
0000000128 |e..| 

을 나는 문 SELECT HEX(obj) FROM data WHERE rowid = 1 단지 진수와 같은 데이터를 얻을 것이다 알고 있지만 지금 나에게 16 진수 덤프보기를 줄 뭔가에 파이프하고 싶다.

PS - 내가보고자하는 데이터가 바이너리 (직렬화 된 POJO)이지만 실험으로 내부에 무엇이 있는지보고 싶습니다. 최종 결과가 어쨌든 어설픈 경우에도 알려주세요.

업데이트 : 몇 가지 제안 사항을 시도했지만 sqlite3이 전체 16 진수를 출력하지 않는 것으로 나타났습니다. 나는 약 500 바이트를 기대하고 있지만 대신 10과 같아집니다.

[email protected]:~# sqlite3 IceCream.db "select hex(obj) from Customers where rowid=1;" 
ACED00057372002D6564752E6761746563682E7365636C6173732E70726F6A656374322E637573746F6D65722E437573746F6D6572000000000000000102000B4C0007616464726573737400124C6A6176612F6C616E672F537472696E673B4C0012617661696C61626C65467265654974656D737400134C6A6176612F6C616E672F496E74656765723B4C00096269727468446174657400104C6A6176612F7574696C2F446174653B4C000C646973636F756E745261746571007E00024C000966697273744E616D6571007E00014C000A676F6C645374617475737400134C6A6176612F6C616E672F426F6F6C65616E3B4C00086C6173744E616D6571007E00014C000D6D6F6E74686C79506F696E747371007E00024C0013706F696E74734561726E656450657254696D657400134C6A6176612F7574696C2F486173684D61703B4C000B746F74616C506F696E747371007E00024C000876697053696E636571007E0003787200386564752E6761746563682E7365636C6173732E70726F6A656374322E73797374656D732E446174616261736553657269616C4F626A65637400000000000000010200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00166C61737454696D654F626A6563744D6F64696669656471007E000778707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000017371007E0009000001497757AAFB740006436172736F6E737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C75657871007E000A000000007372000E6A6176612E7574696C2E44617465686A81014B59741903000078707708000001349BB816607871007E000F74000442696C6C737200116A6176612E6C616E672E426F6F6C65616ECD207280D59CFAEE0200015A000576616C7565787000740005313233205471007E000F737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000146000A6C6F6164466163746F7278703F400000770800000010000000007871007E000F70 


[email protected]:~# sqlite3 IceCream.db "select obj from Customers where rowid=1;" | hexdump -C 
00000000 ac ed 0a           |...| 
00000003 

답변

5

아래 명령을 실행할 수 있습니다.

sqlite3를 용의 test.db는 당신이 필요로하는 거라면 잘 모르겠어요 >> 16 진 덤프

: "ROWID = 1 데이터로부터 진수 (OBJ)을 선택합니다."

+0

이 *이 * 진수 변환입니다. –

+0

'>> hexdump' 부분이 필요 없습니다. –

8

sqlite3 쉘은 이진 데이터 덤프에 ASCII 값을 표시 할 수 없습니다.

당신은 파이프에 별도의 도구로 출력이 있습니다

sqlite3 test.db "SELECT MyBlob FROM MyTable WHERE ID = 42;" | hexdump -C 
sqlite3 test.db "SELECT MyBlob FROM MyTable WHERE ID = 42;" | xxd -g1 

그러나, sqlite3가 표시 할 문자열로 BLOB 변환을, 그래서 덩어리가 0 바이트가 포함되어있는 경우이 작동하지 않습니다.

당신은 출력 진수로 방울을 가지고, 당신은 당신이 원하는 형식으로 표시 할 수 있도록, 그것은 바이너리 백업 변환 :

sqlite3 test.db "SELECT quote(MyBlob) FROM MyTable WHERE id = 42;" \ 
| cut -d\' -f2              \ 
| xxd -r -p               \ 
| xxd -g1 
+0

이상하지만, blob이 sqlite3에서 완전히 빠져 나오지 않았습니다. 나는 아마도 500 바이트 정도의 길이를 예상하고 있지만, 대신에 10과 같은 것을 얻고 있습니까? - 내 원래의 질문에 대한 편집을보십시오. –

+0

데이터에 null 바이트가 있기 때문입니다. 명령 줄 버전의 sqlite3은 모든 것을 문자열로 변환하여 표시합니다. 널 바이트는 문자열을 조기에 종료합니다. CL의 답변 전체를 읽으십시오. –