database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 5245 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5245
익숙하지 않은 자료형 -bytea (binary data types)
작성자
정재익(advance)
작성일
2004-03-10 18:09ⓒ
2004-03-10 18:43ⓜ
조회수
8,631

8.4. Binary Data Types

bytea 자료형은 이진 문자열의 저장이 가능하다; Table 8-6 를 보도록 하라.

 

Table 8-6. Binary Data Types

Name Storage Size Description
bytea 4 bytes plus the actual binary string variable-length binary string

 

이진 문자열은 8진수 (또는 bytes)가 연속된 문자열이다. 이진 문자열은 두가지점에서 일반적인 문자와는 구별이 된다: 첫째로 이진 문자열은 zero 값이나 또는 "출력할 수 없는" 문자열의 저장이 가능하다. 둘째로 이진문자열 처리를 위한 연산자는 문자열을 실제로 byte 단위로 처리를 한다.  반면에 일반 문자는 그 처리와 encoding 이 시스템의 locale 설정에 따라 달라지게 된다.

 

bytea 값을 입력할때, 어떤 octets 값들은 SQL 구문 내에서 문자열 (string literal)의 일부로 사용될 때, 반드시 escape 시켜줘야 한다. (그러나 대부분의 octet 값들이 escape 되어져야 할 것이다) 일반적으로, octet을 escape 시키기 위해서, 그 십진 octet 값에 해당하는 세자리 숫자의 octet number (three-digit octet number) 를 이용해야 하며, 이 숫자 앞에 두개의  backslash 를 적어줘야 한다.  Table 8-7 에는 escape 시켜야 하는 문자를 적어 두었으며, 이용할수 있는 대체 escape sequence 를 표기하였다.

 

Table 8-7. bytea Literal Escaped Octets

Decimal Octet Value Description Escaped Input Representation Example Output Representation
0 zero octet '\\000' SELECT '\\000'::bytea; \000
39 single quote '\'' or '\\047' SELECT '\''::bytea; '
92 backslash '\\\\' or '\\134' SELECT '\\\\'::bytea; \\

 

 

Table 8-7 에 기록된 octet 은 비록 화면 출력시에는 한글자 이상의 backslash 와 zero octet 로 표시되더라도, 정확히 한자의 길이라는 것을 명심하기 바란다.

Table 8-7 에서 처럼 많은 backslash 를 적어 줘야 하는 이유는 입력 문자열들이 PostgreSQL 서버내에서 두단계의 구문분석기를 통과해야 하기 때문이다. 첫번째 쌍의 backslash 는 string-literal parser 에 의해서 escape 문자로서 해석되어지면서 사용되고, 두번째 backslash 쌍을 남겨 둔다. 남은 backslash 는 bytea 입력 함수에서 three-digit octal value 의 시작임을 표시하거나 또는 또다른 backslash 를 escape 시키기 위해서 사용되어 지는 것이다. 예를 들면, 서버에 '\\001'  가 전달되면, string-literal parser 에서 \001 로 변환된다. \001bytea 입력함수로 전단되는데, 이곳에서 십진수 1의 값을 가지는 octet value 로 변환된다. apostrophe (') 문자는 bytea 에서는 특수 문자로서 취급되지 않는다. 그러므로 일반 문자열과 같이 취급된다는 점을 명심하기 바란다. (Section 4.1.2.1 참조바란다.)

Bytea octets 은 출력시에도 escape 되어진다. 일반적으로 각 "출력할수 없는" octet 은 해당하는 동일한 three-digit octal value 로 변환되고, 앞에 하나의 backslash가 추가된다. 대부분의 "출력할수 있는" octets 은 클라이언트의 character set 에 따라서 적절한 표준적인 문자로서 표시된다. 십진수 92 (backslash)에 해당하는 octet 은 특별히 다른 형태로 출력된다. 자세한 것은 Table 8-8 을 참조바란다.

 

Table 8-8. bytea Output Escaped Octets

Decimal Octet Value Description Escaped Output Representation Example Output Result
92 backslash \\ SELECT '\\134'::bytea; \\
0 to 31 and 127 to 255 "non-printable" octets \xxx (octal value) SELECT '\\001'::bytea; \001
32 to 126 "printable" octets ASCII representation SELECT '\\176'::bytea; ~
 

여러분들이 사용하는 PostgreSQL 의 frontend 에 따라서, bytea strings 들을 escaping 또는 unescaping 시키기 위해서 추가적인 작업을 해줘야 할 것이다. 예를 들면, 만약 여러분들이 사용하는 인터페이스가 line feeds와 carrage return 을 자동으로 해석해 버린다면 이것을 적당히 escape 시켜줘야 할것이다.

SQL 표준에는 다른 형태의 binary string type 이 정의되어 있는데, 이들은 BLOB 또는 BINARY LARGE OBJECT로 불린다. 입력 형식은 bytea 와 비교하면 다르다. 그러나 거의 동일한 함수와 연산자를 제공한다.

이 글에 대한 댓글이 총 1건 있습니다.

개인적인 생각으로 이 자료형은 상당히 유용한 자료형입니다.

연산자와 함수가 아직은 미숙하여 널리 퍼지지 않은 자료형이지만 일부 현재까지 이용하던 large object 의 자리를 상당부분 대체할 수 있을 것이라고 생각해 봅니다. 아직은 잘 사용하지 않지만 언젠가는 많이 이용될 것이라고 생각해 봅니다.

정재익(advance)님이 2004-03-10 18:42에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5411connectby 함수 사용하기
김상기
2004-07-16
5694
5383DB 인코딩 컨버전 (서버 <-> 클라이언트) [5]
신기배
2004-06-25
8990
5263익숙하지 않은 자료형 - oid (Object identifer type)
정재익
2004-03-31
8720
5245익숙하지 않은 자료형 -bytea (binary data types) [1]
정재익
2004-03-10
8631
5233익숙하지 않은 자료형 - Array [4]
정재익
2004-03-02
9014
5232로또로 배우는 인덱스 :) [2]
김상기
2004-02-27
6290
5230Pseudo-Types in PostgreSQL
정재익
2004-02-27
5527
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2020 DSN, All rights reserved.
작업시간: 0.010초, 이곳 서비스는
	PostgreSQL v13.1으로 자료를 관리합니다