[oracle] Oracle에서 varchar와 varchar2의 차이점은 무엇입니까?

varchar와 varchar2의 차이점은 무엇입니까?



답변

지금은 동의어입니다.

VARCHAR표준 규정에 따라 앞으로 빈 문자열과 빈 문자열의 Oracle구별을 지원하기 위해 예약되었습니다 .NULLANSI

VARCHAR2NULL빈 문자열과 빈 문자열을 구별하지 않으며 결코하지 않습니다.

빈 문자열을 사용하고 NULL동일한 것을 사용하는 경우을 사용해야합니다 VARCHAR2.


답변

현재 VARCHAR은 VARCHAR2와 정확히 동일하게 작동합니다. 그러나 VARCHAR향후 사용을 위해 예약되어 있으므로이 유형을 사용 해서는 안됩니다.

:에서 촬영 CHAR, VARCHAR, VARCHAR2의 차이점


답변

안정적인 최신 Oracle 프로덕션 버전 12.2 :
데이터 유형에서 가져옴

주요 차이점은이 VARCHAR2내부 데이터 유형VARCHAR외부 데이터 유형 . 내부 데이터 유형과 외부 데이터 유형의 차이점을 이해해야합니다.

데이터베이스 내에서 값은 테이블의 열에 저장됩니다. 내부적으로 Oracle은 내부 형식으로 알려진 특정 형식의 데이터를 나타냅니다 .

일반적으로 OCI (Oracle Call Interface) 응용 프로그램은 데이터의 내부 데이터 형식 표현이 아니라 작성된 언어로 미리 정의 된 호스트 언어 데이터 형식과 작동합니다. OCI 클라이언트 애플리케이션과 데이터베이스 테이블간에 데이터가 전송되면 OCI 라이브러리는 내부 데이터 유형과 외부 데이터 유형간에 데이터를 변환합니다.

외부 유형은 독점 데이터 형식 대신 호스트 언어 유형으로 작업 할 수 있도록하여 프로그래머에게 편의를 제공합니다. OCI는 Oracle 데이터베이스와 OCI 응용 프로그램간에 데이터를 전송할 때 광범위한 데이터 유형 변환을 수행 할 수 있습니다. Oracle 내부 데이터 유형보다 많은 OCI 외부 데이터 유형이 있습니다.

VARCHAR2데이터 형식은 4000 바이트의 최대 길이와 문자의 가변 길이 문자열입니다. init.ora 매개 변수 max_string_size가 기본값이면 최대 길이는 VARCHAR24000 바이트입니다. init.ora 매개 변수 max_string_size = extended 인 경우 최대 길이는 VARCHAR232767 바이트입니다.

VARCHAR다양한 길이의 데이터 유형 저장 문자열. 처음 2 바이트에는 문자열 길이가 포함되고 나머지 바이트에는 문자열이 포함됩니다. 바인드 또는 정의 호출에서 지정된 문자열 길이는 두 개의 길이 바이트를 포함해야하므로 VARCHAR수신 또는 송신 할 수있는 가장 큰 문자열은 65535가 아닌 65533 바이트입니다.

12.2 데이터베이스의 빠른 테스트는 같은 제안 내부 데이터 형식 , 오라클은 여전히 취급 VARCHARA와 유사 데이터 에 대한 VARCHAR2. SYNONYMOracle의 실제 객체 유형 은 아닙니다 .

SQL> select substr(banner,1,80) from v$version where rownum=1;
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> create table test (my_char varchar(20));
Table created.

SQL> desc test
Name                 Null?    Type
MY_CHAR                       VARCHAR2(20)

VARCHARProC / C ++ 프리 컴파일러 옵션 에 대한 영향도 있습니다. 관심이있는 프로그래머를위한 링크는 다음과 같습니다 : Pro * C / C ++ Programmer ‘s Guide


답변

몇 가지 실험 (아래 참조) 후 2017 년 9 월 현재 허용 된 답변에 설명 된 기능과 관련하여 아무런 변화가 없음을 확인할 수 있습니다 .

  1. Oracle 11g의 Rextester 데모 :
    빈 문자열은
    및에NULL대해 s로 삽입됩니다.VARCHARVARCHAR2
  2. Oracle 12c 용 LiveSQL 데모 : 동일한 결과.

이 두 키워드의 역사적 이유 는 다른 질문대한 답변으로 잘 설명되어 있습니다 .


답변

  1. VARCHAR은 최대 2000 바이트 문자를 저장할 수있는 반면 VARCHAR2는 최대 4000 바이트 문자를 저장할 수 있습니다.

  2. 데이터 유형을 VARCHAR로 선언하면 NULL 값의 공간을 차지합니다. VARCHAR2 데이터 유형의 경우 NULL 값에 대한 공간을 차지하지 않습니다. 예를 들어

    name varchar(10)

이름이 ‘Ravi__’인 경우에도 6 바이트의 메모리를 예약하지만

name varchar2(10) 

입력 문자열의 길이에 따라 공간을 예약합니다. 예를 들어, ‘Ravi__’에 대한 4 바이트 메모리.

여기서 _는 NULL을 나타냅니다.

참고 : varchar는 null 값을위한 공간을 예약하고 varchar2는 null 값을위한 공간을 예약하지 않습니다.


답변

현재는 동일합니다. 하지만 이전에는

  1. 인터넷 어딘가에서 나는 그것을 읽었다.

VARCHARNULLANSI 표준에서 규정 한대로 앞으로는 빈 문자열과 구별을 지원하기 위해 Oracle에서 예약합니다 .

VARCHAR2NULL빈 문자열과 빈 문자열을 구별하지 않으며 결코하지 않습니다.

  1. 또한,

Emp_name varchar(10)-10 자리 미만의 값을 입력하면 남은 공간을 삭제할 수 없습니다. 총 10 개의 공간을 사용했습니다.

Emp_name varchar2(10) -10 자리 미만의 값을 입력하면 남은 공간이 자동으로 삭제됩니다.


답변

VARCHAR은 VARCHAR2의 동의어입니다. 그러나 Oracle은 향후 시맨틱을 변경할 수 있으므로 VARCHAR을 사용하지 않아야합니다.