| PostgreSQL 9.1.24 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.1 : 롤 토토 유형 | 위로 | 제8장. 데이터 유형 | PostgreSQL : 문서 : 9.1 : 날짜/토토 사이트 추천 유형 | |
그바이테아데이터 유형은 다음을 저장할 수 있습니다. 바이너리 문자열; 참조표 8-6.
바이너리 문자열은 옥텟(또는 바이트)의 시퀀스입니다. 바이너리 문자열은 두 가지 방식으로 문자열과 구별됩니다. 첫째, 토토 핫 문자열은 특히 옥텟 값 저장을 허용합니다. 0 및 기타"인쇄할 수 없음"옥텟 (보통 32~126 범위 밖의 옥텟) 문자열 0 옥텟을 허용하지 않으며 다른 옥텟 값도 허용하지 않습니다. 및 다음에 따라 유효하지 않은 옥텟 값의 시퀀스 데이터베이스가 선택한 문자 세트 인코딩. 둘째, 작업 이진 문자열은 실제 바이트를 처리하는 반면, 처리는 문자열의 수는 로케일 설정에 따라 다릅니다. 한마디로 바이너리 문자열은 프로그래머가 데이터를 저장하는 데 적합합니다. 다음과 같이 생각한다"원시 바이트", 반면 문자열은 텍스트를 저장하는 데 적합합니다.
그바이테아유형은 두 개의 외부를 지원합니다. 입력 및 출력 형식:포스트그레SQL의 역사"탈출"형식 및"16진수"형식. 이 두 가지 모두 항상 허용됩니다. 입력. 출력 형식은 구성 매개변수에 따라 다릅니다.bytea_output; 기본값은 16진수입니다. (16진수 형식은 다음에서 도입되었습니다.포스트그레SQL9.0; 이전 버전 일부 도구는 이를 이해하지 못합니다.)
그SQL표준은 다음을 정의합니다. 다른 이진 문자열 유형, 호출됨BLOB또는토토 핫 대형 객체. 입력 형식은 와는 다르다바이테아, 하지만 제공된 함수와 연산자는 대부분 동일합니다.
그"16진수"형식은 토토 핫를 인코딩합니다. 바이트당 2개의 16진수 숫자로 된 데이터, 최상위 니블 먼저. 전체 문자열 앞에는 시퀀스가 옵니다.\x(이스케이프 형식과 구별하기 위해). 일부 상황에서는 초기 백슬래시를 이스케이프해야 할 수도 있습니다. 백슬래시가 필요한 경우와 마찬가지로 두 배로 늘립니다. 이스케이프 형식으로 두 배가 됩니다. 자세한 내용은 아래에 나타납니다. 는 16진수는 대문자 또는 소문자일 수 있습니다. 숫자 쌍 사이에는 공백이 허용됩니다. 숫자 쌍 또는 시작 부분에 없음\x시퀀스). 16진수 형식은 다양한 형식과 호환됩니다. 외부 애플리케이션 및 프로토콜을 사용하며 속도가 더 빨라지는 경향이 있습니다. 이스케이프 형식보다 변환하기 때문에 그 사용이 선호됩니다.
예:
SELECT E'\\xDEADBEEF';
그"탈출"형식은 전통적PostgreSQL형식 에 대한바이테아유형. 접근 방식이 필요합니다 토토 핫 문자열을 ASCII 시퀀스로 표현 문자를 변환할 수 없는 바이트를 변환하는 동안 특수 이스케이프에 ASCII 문자로 표시됨 시퀀스. 만약, 응용프로그램의 관점에서 보면, 바이트를 문자로 표현하는 것이 의미가 있습니다. 표현이 편리할 수 있습니다. 그러나 실제로는 일반적으로 바이너리 간의 구별이 모호해지기 때문에 혼란스럽습니다. 문자열과 문자열, 그리고 특정 이스케이프 선택한 메커니즘은 다소 다루기 어렵습니다. 그래서 이 형식은 대부분의 새로운 애플리케이션에서는 피해야 할 것입니다.
입장 시바이테아이스케이프 값 형식, 특정 값의 옥텟반드시이스케이프되고 모든 옥텟은 값할 수 있습니다수 탈출했다. 일반적으로 옥텟을 이스케이프하려면 옥텟을 해당 옥텟으로 변환합니다. 3자리 8진수 값 앞에 백슬래시(또는 2개)를 붙입니다. 백슬래시(Escape를 사용하여 값을 리터럴로 쓰는 경우) 문자열 구문). 백슬래시 자체(옥텟 값 92)는 또는 이중 백슬래시로 표시됩니다.표 8-7이스케이프해야 하는 문자를 표시하고 해당되는 경우 대체 이스케이프 시퀀스입니다.
표 8-7.바이테아리터럴 이스케이프된 옥텟
| 십진수 옥텟 값 | 설명 | 이스케이프된 입력 표현 | 예 | 출력 표현 | 
|---|---|---|---|---|
| 0 | 0옥텟 | E'\\000' | 선택 E'\\000'::bytea; | \000 | 
| 39 | 작은따옴표 | ''''또는E'\\047' | SELECT E'\''::bytea; | ' | 
| 92 | 백슬래시 | E'\\\\'또는E'\\134' | 선택 E'\\\\'::bytea; | \\ | 
| 0~31 및 127~255 | "인쇄할 수 없음"옥텟 | E'\\xxx'(8진수 값) | 선택 E'\\001'::bytea; | \001 | 
탈출 요건인쇄할 수 없음옥텟은 다양함 로캘 설정에 따라 다릅니다. 어떤 경우에는 다음을 얻을 수 있습니다. 탈출하지 못한 채로 남겨두세요. 각각의 결과를 참고하세요. 예시 중표 8-7이었음 출력이 정확히 1옥텟 길이임에도 불구하고 표현은 때로는 두 문자 이상입니다.
다음과 같이 여러 개의 백슬래시가 필요한 이유테이블 8-7, 문자열 리터럴로 작성된 입력 문자열입니다. 에서 두 개의 구문 분석 단계를 통과해야 합니다.포스트그레SQL서버. 첫 번째 백슬래시 각 쌍은 다음에서 이스케이프 문자로 해석됩니다. 문자열 리터럴 구문 분석기(이스케이프 문자열 구문이 사용된다고 가정) 따라서 소비되어 두 번째 백슬래시가 남습니다. 쌍. (달러 인용 문자열을 사용하면 이러한 수준의 오류를 방지할 수 있습니다. 이스케이프 처리됩니다.) 그러면 나머지 백슬래시는바이테아다음 중 하나를 시작하는 입력 함수 세 자리 8진수 값이거나 다른 백슬래시를 이스케이프합니다. 에 대한 예를 들어 서버에 다음과 같이 전달된 문자열 리터럴입니다.E'\\001'되다\001이스케이프 문자열 파서를 통과한 후.\001그런 다음로 전송됩니다.바이테아입력 함수, 여기서는 10진수 값이 1인 단일 옥텟입니다. 작은따옴표 문자는 특별히 처리되지 않습니다.바이테아, 따라서 문자열에 대한 일반적인 규칙을 따릅니다. 리터럴. (또한 참조섹션 4.1.2.1.)
바이테아옥텟은 때때로 이스케이프됩니다. 출력할 때. 일반적으로 각"인쇄할 수 없음"옥텟은 옥텟으로 변환됩니다. 3자리 8진수 값에 해당하고 앞에 1이 옵니다. 백슬래시. 대부분"인쇄 가능"옥텟 클라이언트의 표준 표현으로 표현됩니다. 문자 집합. 10진수 값이 92인 옥텟(백슬래시)은 다음과 같습니다. 출력이 두 배로 늘어났습니다. 자세한 내용은 다음을 참조하세요.테이블 8-8.
표 8-8.바이테아출력 이스케이프된 옥텟
| 십진수 옥텟 값 | 설명 | 이스케이프된 출력 표현 | 예 | 출력 결과 | 
|---|---|---|---|---|
| 92 | 백슬래시 | \\ | 선택 E'\\134'::bytea; | \\ | 
| 0~31 및 127~255 | "인쇄할 수 없음"옥텟 | \xxx(8진수 값) | 선택 E'\\001'::bytea; | \001 | 
| 32 ~ 126 | "인쇄 가능"옥텟 | 클라이언트 문자 집합 표현 | 선택 E'\\176'::bytea; | ~ | 
프런트 엔드에 따라 다름PostgreSQL당신은 사용하고 있을 수도 있습니다 이스케이프 및 언이스케이프 측면에서 수행할 추가 작업바이테아문자열. 예를 들어, 다음과 같은 경우가 있습니다. 또한 줄 바꿈 및 캐리지 리턴을 이스케이프해야 합니다. 인터페이스가 이를 자동으로 번역합니다.