대부분의 데이터베이스 시스템은 원시 데이터를 저장할 수 있는 데이터 형식을 제공합니다. 나는 원시 데이터라는 용어를 사용하여 데이터베이스가 값의 구조 나 의미를 이해하지 못한다는 것을 의미합니다. 다른 데이터 형식의 구조와 의미를 이해합니다. 예를 들어 정수 열을 정의하면 해당 열에 배치한 데이터의 바이트가 정수 값을 나타내야 한다는 것을 알 수 있습니다. 정수가 무엇인지 알고 있습니까?정수를 추가하고,곱하고,문자열 형태로 변환 할 수 있습니다. 원시 데이터,다른 한편으로는,비트의 단지 모음입니다?데이터에서 어떤 의미도 추론 할 수 없습니다.

원시 데이터를 저장하기 위한 형식 바이트를 제공합니다. 바이 티 열은 이론적으로 어떤 길이의 값을 보유 할 수 있지만,최대 길이는 1 기가 바이트 것으로 보인다.

바이트 값의 크기는 4 바이트와 값의 실제 바이트 수입니다.

리터럴 값의 구문

바이트 값을 입력하는 것은 약간 까다로울 수 있습니다. 작은따옴표로 묶인 문자열입니다. 그 점을 감안할 때 작은 따옴표를 포함하는 바이트 값을 어떻게 입력 할 수 있습니까? 문자열 리터럴 값(이 장 앞부분)에 대한 설명을 다시 살펴보면 문자열 값에 특수 문자를 이스케이프하여 포함할 수 있음을 알 수 있습니다. 특히 작은 따옴표는 세 가지 방법 중 하나로 이스케이프 처리 할 수 있습니다:

  • 작은 따옴표를 두 배로 늘리십시오(‘이것은 작은 따옴표입니다”‘)

  • 작은따옴표 앞에 백슬래시(‘작은따옴표입니다\”)

  • 대신 문자의 8 진수 값을 포함하십시오(‘이것은 작은 따옴표입니다\047’)

바이 티 리터럴을 입력 할 때 이스케이프해야하는 다른 두 문자가 있습니다. 값이 0 인 바이트(문자 0 이 아니라 널 바이트)는 이스케이프되어야 하고 백슬래시 문자는 이스케이프되어야 합니다. 모든 문자를 이스케이프할 수 있습니다. “\\기음”양식을 사용하여 인쇄 가능한 문자를 이스케이프 할 수 있습니다. 따라서 0 바이트를 포함하는 바이트 값을 저장하려면 다음과 같이 입력 할 수 있습니다:

'This is a zero byte \000'

백슬래시가 포함된 바이트 값을 저장하려면 다음 형식 중 하나로 입력할 수 있습니다:

'This is a backslash \\''This is also a backslash \134'

이러한 규칙을 문자열 리터럴을 인용하는 규칙과 비교하면 바이트 리터럴에 두 배의 백슬래시 문자가 필요하다는 것을 알 수 있습니다. 이 파서는 다음과 같은 기능을 가지고 있습니다. 바이 티 리터럴은 두 개의 다른 파서에 의해 처리됩니다. (백슬래시 문자의 첫 번째 세트를 삼키고)문자열 리터럴로 바이 티 리터럴을 본다. 그런 다음 바이티 파서는 결과를 처리하여 두 번째 백슬래시 문자 집합을 삼킵니다.

따라서 이와 같은 바이트 값이 백슬래시\인 경우’이 백슬래시\\\\’로 인용합니다. 문자열 파서가이 문자열을 처리 한 후’이것은 백 슬래시\\’로 바뀌 었습니다. 바이 티 파서는 마침내 이것을 백 슬래시\로 변환합니다.

지원되는 연산자

연결(//)연산자를 사용하여 하나의 바이트 값을 다른 바이트 값에 추가할 수 있습니다.

평등/부등식에 대해서도 두 바이트 값을 비교할 수 없습니다. 물론 캐스트()연산자를 사용하여 바이트 값을 다른 값으로 변환 할 수 있으며 다른 연산자를 열 수 있습니다.

대형 개체

바이트 데이터 형식은 현재 1 기가바이트보다 큰 값을 저장하는 것으로 제한됩니다. 바이트 열에 맞는 값보다 큰 값을 저장해야 하는 경우 큰 개체를 사용할 수 있습니다. 큰 개체는 테이블 외부에 저장된 값입니다. 예를 들어,테이프 테이블의 각 행과 함께 사진을 저장하려는 경우 해당 대형 개체에 대한 참조를 보유할 수 있는 데이터 열을 추가합니다:

movies=# ALTER TABLE tapes ADD COLUMN photo_id OID;ALTER

각 값은 시스템 테이블의 항목을 참조합니다. 예를 들어,외부 파일(예:파일)을 로드하는 함수를 제공합니다:이 함수는 큰 개체를 참조하는 값을 반환합니다. 이제 이 행을 선택하면 사진을 구성하는 실제 비트가 아닌 오이드를 볼 수 있습니다:

movies=# SELECT * FROM tapes WHERE title = 'Casablanca'; tape_id | title | photo_id----------+------------+---------- MC-68873 | Casablanca | 510699

만약 당신이 사진을 파일에 다시 쓰고 싶다면,:

movies=# SELECT lo_export( 510699, '/tmp/Casablanca.jpg' ); lo_export----------- 1(1 row)

현재 데이터베이스에 있는 모든 대형 개체를 보려면 다음을 사용합니다:

movies=# \lo_list Large objects ID | Description--------+------------- 510699 |(1 row)

이 함수를 사용하여 데이터베이스에서 큰 개체를 제거할 수 있습니다:

movies=# SELECT lo_unlink( 510699 ); lo_unlink----------- 1(1 row)movies=# \lo_list Large objects ID | Description----+-------------(0 rows)

참조 오이드 뒤의 실제 비트를 어떻게 얻을 수 있습니까? 당신은 할 수 없습니다?적어도 프로필에서는 그렇지 않다. 사용 중인 클라이언트 응용 프로그램에 대형 개체 지원을 구축해야 합니다. 따라서 가장 좋은 방법은 원시 데이터를 보는 것입니다. 대부분의 경우 원시 데이터를 올바르게 해석할 수 있습니다.