8.4. 이진 데이터 유형#

theBYTEA데이터 유형은 이진 토토 베이열을 저장할 수 있습니다. 보다표 8.6.

표 8.6. 이진 데이터 유형

이름 스토리지 크기 설명
BYTEA 1 또는 4 바이트 + 실제 바이너리 토토 베이열 가변 길이 이진 토토 베이열

이진 토토 베이열은 일련의 옥트 (또는 바이트)입니다. 이진 토토 베이열은 두 가지 방식으로 토토 베이열과 구별됩니다. 먼저, 이진 토토 베이열은 특히 값의 옥넷을 저장할 수 있습니다인쇄 할 수없는Octets (보통, 십진수 32 ~ 126 외부의 옥트). 토토 베이 토토 베이열은 제로 옥제를 허용하지 않으며 데이터베이스의 선택된 토토 베이 세트 인코딩에 따라 유효하지 않은 다른 옥트 값과 옥트 값의 시퀀스를 허용하지 않습니다. 둘째, 이진 토토 베이열에 대한 작업은 실제 바이트를 처리하는 반면, 특성 토토 베이열의 처리는 로케일 설정에 따라 다릅니다. 요컨대, 이진 토토 베이열은 프로그래머가 생각하는 데이터를 저장하는 데 적합합니다.원시 바이트, 캐릭터 토토 베이열은 텍스트 저장에 적합합니다.

theBYTEA입력 및 출력에 대한 두 가지 형식을 지원합니다 :hex형식 및PostgreSQL의 역사적탈출형식. 이 두 가지 모두 항상 입력에 받아 들여집니다. 출력 형식은 구성 매개 변수에 따라 다릅니다.bytea_output; 기본값은 16 진수입니다. (HEX 형식은에서 소개되었습니다.PostgreSQL9.0; 이전 버전과 일부 도구는 이해하지 못합니다.)

theSQL표준은 다른 바이너리 토토 베이열 유형을 정의합니다.Blob또는이진 큰 개체. 입력 형식은와 다릅니다.BYTEA, 그러나 제공된 기능과 연산자는 대부분 동일합니다.

8.4.1. BYTEA16 진 형식#

hex형식은 바이트 당 26 진수 숫자로 이진 데이터를 인코딩합니다. 전체 토토 베이열에는 시퀀스가 앞서\ x(탈출 형식과 구별하기 위해). 어떤 상황에서는 초기 백 슬래시를 두 배로 늘려서 탈출해야 할 수 있습니다 (참조섹션 4.1.2.1). 입력의 경우, 16 진수 숫자는 상단 또는 소문자 일 수 있으며 숫자 쌍간에 공백이 허용됩니다 (그러나 숫자 쌍 내에 있거나 시작하는\ x시퀀스). HEX 형식은 광범위한 외부 응용 프로그램 및 프로토콜과 호환되며 탈출 형식보다 변환하는 것이 더 빠르기 때문에 사용이 선호됩니다..

예 :

set bytea_output = 'hex';

'\ xdeadbeef':: bytea;
   바이트
------------
 \ xdeadbeef

8.4.2. BYTEA탈출 형식#

the탈출형식은 전통적인 것입니다PostgreSQL형식BYTEA타입. 이진 문자열을 ASCII 문자의 시퀀스로 표현하는 동시에 ASCII 문자로 표현할 수없는 바이트를 특수 탈출 시퀀스로 변환하는 접근 방식이 필요합니다. 응용 프로그램의 관점에서 문자로 바이트를 나타내는 것이 의미가있는 경우이 표현이 편리 할 수 있습니다. 그러나 실제로 그것은 이진 문자열과 문자 문자열 사이의 구별을 퍼지하기 때문에 일반적으로 혼란스럽고, 선택된 특정 탈출 메커니즘은 다소 다루기 힘들다. 따라서이 형식은 아마도 대부분의 새로운 응용 프로그램에 대해 피해야 할 것입니다.

입력 할 때BYTEA탈출 형식의 값, 특정 값의 옥넷필수탈출 중이며 모든 옥넷 값can탈출하십시오. 일반적으로 옥셋을 탈출하려면 3 자리 옥탈 값으로 변환하여 백 슬래시로 우선합니다. 백 슬래시 자체 (Octet Decimal Value 92)는 이중 백 슬래시로 표현 될 수 있습니다.표 8.7탈출 해야하는 문자를 표시하고 해당되는 경우 대체 탈출 시퀀스를 제공합니다.

표 8.7. BYTEA문자 탈출 한 옥제

십진 옥넷 값 설명 탈출 된 입력 표현 example 16 진수
0 Zero Octet '\ 000' '\ 000':: bytea 17999_18005
39 단일 견적 '' ''또는'\ 047' '' '':: bytea \ x27
92 backslash '\\'또는'\ 134' '\\':: BYTEA \ x5c
0 ~ 31 및 127 ~ 255 인쇄 할 수없는Octets '\xxx '(Octal Value) '\ 001':: bytea \ x01

탈출 요구 사항인쇄 할 수없는Octets는 로케일 설정에 따라 다릅니다. 경우에 따라 당신은 그들을지지하지 않고 떠날 수 있습니다.

단일 따옴표가 두 배가되어야하는 이유표 8.7, 이것은 SQL 명령의 모든 문자열 문자에 맞는 것입니다. 일반 문자열 라이터 파서는 가장 바깥 쪽 단일 따옴표를 소비하고 단일 따옴표 쌍을 하나의 데이터 문자로 줄입니다. 무엇BYTEA입력 함수는 하나의 단일 인용문 일 뿐이며, 이는 일반 데이터 토토 베이로 취급됩니다. 그러나BYTEA입력 함수는 백 슬래시를 특별한 것으로 취급하고 다른 동작에 표시됩니다표 8.7해당 기능에 의해 구현됩니다.

일부 컨텍스트에서는 일반적인 토토 베이열 라이터 파서가 백 슬래시 쌍을 하나의 데이터 토토 베이로 줄일 것이기 때문에 위에 표시된 것과 비교하여 백 슬래시를 두 배로 늘려야합니다. 보다섹션 4.1.2.1.

BYTEAOctets가 출력됩니다hex기본적으로 형식. 변경하면bytea_outputto탈출, 인쇄 할 수없는Octets는 동등한 3 자리 옥탈 값으로 변환되고 하나의 백 슬래시가 앞서 있습니다. 최대인쇄용Octets는 클라이언트 문자 세트에서 표준 표현에 의해 출력됩니다 (예 :

SET BYTEA_OUTPUT = 'ESCAPE';

'ABC \ 153 \ 154 \ 155 \ 052 \ 251 \ 124':: BYTEA;
     바이트
---------------
 ABC KLM *\ 251T

소수점 값 92 (Backslash)의 옥트는 출력에서 두 배가됩니다. 세부 사항은표 8.8.

표 8.8. BYTEA출력 탈출 옥넷

십진 옥넷 값 설명 탈출 된 출력 표현 example 출력 결과
92 backslash \\ '\ 134':: BYTEA \\
0 ~ 31 및 127 ~ 255 인쇄 할 수없는Octets \xxx(Octal Value) '\ 001':: BYTEA \ 001
32 ~ 126 인쇄용Octets 클라이언트 토토 베이 세트 표현 '\ 176':: bytea ~

프론트 엔드에 따라PostgreSQL당신은 사용하고, 탈출 및 방해받지 않는 측면에서해야 할 추가 작업이있을 수 있습니다BYTEA줄. 예를 들어 인터페이스가 자동으로 변환되면 라인 피드와 캐리지 리턴을 탈출해야 할 수도 있습니다.

수정 제출

문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면