그바이테아데이터 유형은 젠 토토 문자열 저장을 허용합니다. 참조표 8.6.
표 8.6. 바이너리 데이터 유형
| 이름 | 저장소 크기 | 설명 |
|---|---|---|
바이테아 |
1 또는 4바이트 + 실제 젠 토토 문자열 | 가변 길이 젠 토토 문자열 |
바이너리 문자열은 옥텟(또는 바이트)의 시퀀스입니다. 젠 토토 문자열은 두 가지 방식으로 문자열과 구별됩니다. 첫째, 젠 토토 문자열은 특히 값 0과 기타의 옥텟을 저장할 수 있습니다.“인쇄할 수 없음”옥텟(일반적으로 십진수 범위 32~126을 벗어난 옥텟). 문자열은 0옥텟을 허용하지 않으며 데이터베이스의 선택된 문자 집합 인코딩에 따라 유효하지 않은 다른 옥텟 값과 옥텟 값 시퀀스도 허용하지 않습니다. 둘째, 젠 토토 문자열에 대한 작업은 실제 바이트를 처리하는 반면 문자열 처리는 로케일 설정에 따라 달라집니다. 간단히 말해서 바이너리 문자열은 프로그래머가 생각하는 데이터를 저장하는 데 적합합니다.“원시 바이트”, 문자열은 텍스트를 저장하는 데 적합합니다.
그바이테아type은 입력 및 출력에 대해 두 가지 형식을 지원합니다.“16진수”형식 및포스트그레SQL의 역사“탈출”형식. 이 두 가지 모두 입력 시 항상 허용됩니다. 출력 형식은 구성 매개변수에 따라 다릅니다.bytea_output; 기본값은 16진수입니다. (16진수 형식은 다음에서 도입되었습니다.PostgreSQL9.0; 이전 버전과 일부 도구에서는 이를 이해하지 못합니다.)
그SQL표준은 다음과 같은 다른 바이너리 문자열 유형을 정의합니다.BLOB또는젠 토토 대형 객체. 입력 형식이 다음과 다릅니다.바이테아, 하지만 제공되는 함수와 연산자는 대부분 동일합니다.
바이테아16진수 형식#그“16진수”형식은 바이너리 데이터를 바이트당 2개의 16진수 숫자로 인코딩하며 최상위 니블부터 시작합니다. 전체 문자열 앞에는 시퀀스가 옵니다.\x(이스케이프 형식과 구별하기 위해). 일부 상황에서는 초기 백슬래시를 두 배로 늘려 이스케이프해야 할 수도 있습니다(참조섹션 4.1.2.1). 입력의 경우 16진수는 대문자 또는 소문자일 수 있으며 숫자 쌍 사이에는 공백이 허용됩니다(그러나 숫자 쌍 내나 시작 부분에는 허용되지 않음)\x시퀀스). 16진수 형식은 광범위한 외부 애플리케이션 및 프로토콜과 호환되며 이스케이프 형식보다 변환 속도가 빠른 경향이 있으므로 사용이 선호됩니다.
예:
SET bytea_output = '16진수'; SELECT '\xDEADBEEF'::bytea; 바이티 ------------ \xdeadbeef
바이테아이스케이프 형식#그“탈출”형식이 전통적임PostgreSQL형식바이테아유형. 이진 문자열을 ASCII 문자 시퀀스로 표현하는 동시에 ASCII 문자로 표현할 수 없는 바이트를 특수 이스케이프 시퀀스로 변환하는 접근 방식을 취합니다. 애플리케이션의 관점에서 바이트를 문자로 표현하는 것이 타당하다면 이 표현이 편리할 수 있습니다. 그러나 실제로는 이진 문자열과 문자열 사이의 구별이 모호해지고 선택된 특정 이스케이프 메커니즘이 다소 다루기 힘들기 때문에 일반적으로 혼란스럽습니다. 따라서 대부분의 새로운 애플리케이션에서는 이 형식을 피해야 할 것입니다.
입장 시바이테아이스케이프 형식의 값, 특정 값의 옥텟반드시이스케이프되고 모든 옥텟 값은할 수 있습니다탈출됩니다. 일반적으로 옥텟을 이스케이프하려면 이를 세 자리 8진수 값으로 변환하고 앞에 백슬래시를 추가합니다. 백슬래시 자체(옥텟 10진수 값 92)는 이중 백슬래시로 표시될 수도 있습니다.표 8.7이스케이프해야 하는 문자를 표시하고 해당되는 경우 대체 이스케이프 시퀀스를 제공합니다.
표 8.7. 바이테아리터럴 이스케이프된 옥텟
| 십진수 옥텟 값 | 설명 | 이스케이프된 입력 표현 | 예 | 16진수 표현 |
|---|---|---|---|---|
| 0 | 0옥텟 | '\000' |
'\000'::바이테아 |
\x00 |
| 39 | 작은따옴표 | ''''또는'\047' |
''''::바이테아 |
\x27 |
| 92 | 백슬래시 | '\\'또는'\134' |
'\\'::bytea |
\x5c |
| 0~31 및 127~255 | “인쇄할 수 없음”옥텟 | '\(8진수 값) |
'\001'::바이테아 |
\x01 |
탈출요구사항인쇄할 수 없음옥텟은 로케일 설정에 따라 다릅니다. 어떤 경우에는 이스케이프 처리하지 않고 그대로 둘 수 있습니다.
아래와 같이 작은따옴표를 두 배로 늘려야 하는 이유표 8.7, 이는 SQL 명령의 모든 문자열 리터럴에 해당된다는 것입니다. 일반 문자열 리터럴 파서는 가장 바깥쪽의 작은따옴표를 사용하고 모든 작은따옴표 쌍을 하나의 데이터 문자로 줄입니다. 뭐야바이테아입력 함수는 작은따옴표 하나만 보고 일반 데이터 문자로 취급합니다. 그러나,바이테아입력 함수는 백슬래시를 특별하게 처리하고 기타 동작은 다음과 같습니다.표 8.7해당 함수로 구현됩니다.
일부 상황에서는 일반 문자열 리터럴 파서가 백슬래시 쌍을 하나의 데이터 문자로 줄이기 때문에 위에 표시된 것과 비교하여 백슬래시를 두 배로 늘려야 합니다. 참조섹션 4.1.2.1.
바이테아옥텟은 다음에 출력됩니다.16진수기본적으로 형식을 지정합니다. 변경하는 경우bytea_output에탈출, “인쇄할 수 없음”옥텟은 해당하는 3자리 8진수 값으로 변환되며 앞에 백슬래시가 1개 옵니다. 대부분“인쇄 가능”옥텟은 클라이언트 문자 집합의 표준 표현으로 출력됩니다. 예:
SET bytea_output = 'escape';
SELECT 'abc \153\154\155 \052\251\124'::bytea;
바이티
----------------
abc klm *\251T
10진수 값 92(백슬래시)의 옥텟이 출력에서 두 배가 됩니다. 자세한 내용은 다음을 참조하세요.표 8.8.
표 8.8. 바이테아출력 이스케이프 옥텟
| 십진수 옥텟 값 | 설명 | 이스케이프된 출력 표현 | 예 | 출력 결과 |
|---|---|---|---|---|
| 92 | 백슬래시 | \\ |
'\134'::bytea |
\\ |
| 0 ~ 31 및 127 ~ 255 | “인쇄할 수 없음”옥텟 | \(8진수 값) |
'\001'::바이테아 |
\001 |
| 32 ~ 126 | “인쇄 가능”옥텟 | 클라이언트 문자 집합 표현 | '\176'::bytea |
~ |
프런트 엔드에 따라 다름PostgreSQL이스케이프 및 언이스케이프 측면에서 수행해야 할 추가 작업이 있을 수 있습니다.바이테아문자열. 예를 들어 인터페이스가 자동으로 번역하는 경우 줄 바꿈 및 캐리지 리턴을 이스케이프해야 할 수도 있습니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.