티스토리 뷰

반응형

대부분의 RDBMS 데이터베이스에 이미지 파일을 저장할때는 BLOB 형식이 사용됩니다.

Informix에서는 BYTE 와 BLOB 형식에 저장하는데요. Informix의 BYTE 컬럼에 저장된 이미지 파일의 확장자를 구분하는 방법을 정리해 보겠습니다.

 

Informix의 BYTE 컬럼의 데이터는 아래와 같이 SELECT 문장으로 확인할 수 없기 때문에, TEXT 타입으로 변환한 후 조회하는 방법을 시도해봤습니다. 이렇게 하면 바이너리 파일을 텍스트 에디터로 여는 것과 같은 결과가 나오죠.

그러면 파일의 시작부분에서 확장자임을 나타내는 문자열을 확인할 수 있습니다. 이와 관련하여 제가 참조한 포스팅은 하단의 링크를 참고해주세요.

$ echo "select cat_picture[1,2] from catalog_copy1 where catalog_num=10001" | dbaccess stores_demo

cat_picture  <BYTE value>

1 row(s) retrieved.


$ echo "select cat_picture[1,2]::text from catalog_copy1 where catalog_num=10001" | dbaccess stores_demo

(expression)
GI

1 row(s) retrieved.

이렇게 확인할 수도 있지만 TEXT 타입은 CHAR , VARCHAR 형식으로 변환할 수 없어 여러 건의 데이터를 확인하기 위한 조건절로 사용할 수가 없습니다. DataBlade라는 모듈을 설치해서 TEXT 타입의 데이터를 VARCHAR 형식으로 반환하기 위한 함수를 사용할 수 있습니다.

> EXECUTE FUNCTION sysbldprepare('excompat.1.0','create');


(expression)

           0

1 row(s) retrieved.

위와 같이 DataBlade 모듈을 설치하면 LOB 데이터를 처리할 수 있는 함수들이 생성되어 사용할 수 있습니다. 그 중에 LOB 데이터의 일부를 추출할 수 있는 DBMS_LOB_SUBSTR 함수를 사용하여 위와 동일한 결과를 얻었습니다.

echo "select dbms_lob_substr(cat_picture::text,2) from catalog_copy1 where catalog_num=10003" | dbaccess stores_demo

(expression)


BM

1 row(s) retrieved.

위와같은 방법으로 GIF, JPG, PNG등의 형식도 확인할 수 있습니다. 제가 확인한 방법은 아래 네가지 입니다.

함수 실행 방법 함수 실행 결과 이미지 파일 확장자
DBMS_LOB_SUBSTR(컬럼명::TEXT,2) BM BMP
DBMS_LOB_SUBSTR(컬럼명::TEXT,2) GI GIF
DBMS_LOB_SUBSTR(컬럼명::TEXT,2,3) NG PNG
DBMS_LOB_SUBSTR(컬럼명::TEXT,4,7) JFIF JPG

위에서 언급한 포스팅에 게시한 분께서도 말씀하셨듯이 일종의 편법이지만, 쿼리로 간단히 확인할 수 있어 유용하네요.

다른 DBMS에서도 이와 대응되는 데이터 타입이 있다면 응용해서 사용할 수 있을 것 같습니다.

 

https://guisin.net/38

 

DataBase에 저장된 JPG, BMP, GIF 구분하기

Question 사진 파일을 DataBase(blob)에 저장을 해두었습니다. 근데 사진을 올릴때 확장자가 다른 사진들이 함께 들어가있습니다. (JPG, BMP, GIF 등등) 모든 사진을 특정 디렉토리에 내려받았는데(모든 확

guisin.net

 

반응형
댓글