답변:
지금은 동의어입니다.
VARCHAR
표준 규정에 따라 앞으로 빈 문자열과 빈 문자열의 Oracle
구별을 지원하기 위해 예약되었습니다 .NULL
ANSI
VARCHAR2
NULL
빈 문자열과 빈 문자열을 구별하지 않으며 결코하지 않습니다.
빈 문자열을 사용하고 NULL
동일한 것을 사용하는 경우을 사용해야합니다 VARCHAR2
.
VARCHAR2
현재 동작 VARCHAR
해야하는 형식이 없기 때문 입니다. 실제로 VARCHAR
제대로 구현 될 때까지 전혀 사용하지 않아야합니다 .
where x is NULL
수익률 다른 결과가 where x = ''
않습니다 하지 그 의미 NULL
와 ''
어떤 방식으로 다른에 있습니다. 다른 동작은 =
조작자 때문입니다.
현재 VARCHAR은 VARCHAR2와 정확히 동일하게 작동합니다. 그러나 VARCHAR
향후 사용을 위해 예약되어 있으므로이 유형을 사용 해서는 안됩니다.
:에서 촬영 CHAR, VARCHAR, VARCHAR2의 차이점
VARCHAR
해서는 안됩니다. 내가 그것을 편집
안정적인 최신 Oracle 프로덕션 버전 12.2 : 데이터 유형에서 가져옴
주요 차이점은이 VARCHAR2
인 내부 데이터 유형 및 VARCHAR
인 외부 데이터 유형 . 내부 데이터 유형과 외부 데이터 유형의 차이점을 이해해야합니다.
데이터베이스 내에서 값은 테이블의 열에 저장됩니다. 내부적으로 Oracle은 내부 형식으로 알려진 특정 형식의 데이터를 나타냅니다 .
일반적으로 OCI (Oracle Call Interface) 응용 프로그램은 데이터의 내부 데이터 형식 표현이 아니라 작성된 언어로 미리 정의 된 호스트 언어 데이터 형식과 작동합니다. OCI 클라이언트 애플리케이션과 데이터베이스 테이블간에 데이터가 전송되면 OCI 라이브러리는 내부 데이터 유형과 외부 데이터 유형간에 데이터를 변환합니다.
외부 유형은 독점 데이터 형식 대신 호스트 언어 유형으로 작업 할 수 있도록하여 프로그래머에게 편의를 제공합니다. OCI는 Oracle 데이터베이스와 OCI 응용 프로그램간에 데이터를 전송할 때 광범위한 데이터 유형 변환을 수행 할 수 있습니다. Oracle 내부 데이터 유형보다 많은 OCI 외부 데이터 유형이 있습니다.
VARCHAR2
데이터 형식은 4000 바이트의 최대 길이와 문자의 가변 길이 문자열입니다. init.ora 매개 변수 max_string_size가 기본값이면 최대 길이는 VARCHAR2
4000 바이트입니다. init.ora 매개 변수 max_string_size = extended 인 경우 최대 길이는 VARCHAR2
32767 바이트입니다.
VARCHAR
다양한 길이의 데이터 유형 저장 문자열. 처음 2 바이트에는 문자열 길이가 포함되고 나머지 바이트에는 문자열이 포함됩니다. 바인드 또는 정의 호출에서 지정된 문자열 길이는 두 개의 길이 바이트를 포함해야하므로 VARCHAR
수신 또는 송신 할 수있는 가장 큰 문자열은 65535가 아닌 65533 바이트입니다.
12.2 데이터베이스의 빠른 테스트는 같은 제안 내부 데이터 형식 , 오라클은 여전히 취급 VARCHAR
A와 유사 데이터 에 대한 VARCHAR2
. SYNONYM
Oracle의 실제 객체 유형 은 아닙니다 .
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)
VARCHAR
ProC / C ++ 프리 컴파일러 옵션 에 대한 영향도 있습니다. 관심이있는 프로그래머를위한 링크는 다음과 같습니다 : Pro * C / C ++ Programmer 's Guide
몇 가지 실험 (아래 참조) 후 2017 년 9 월 현재 허용 된 답변에 설명 된 기능과 관련하여 아무런 변화가 없음을 확인할 수 있습니다 .
NULL
대해 s로 삽입됩니다.VARCHAR
VARCHAR2
VARCHAR은 최대 2000 바이트 문자를 저장할 수있는 반면 VARCHAR2는 최대 4000 바이트 문자를 저장할 수 있습니다.
데이터 유형을 VARCHAR로 선언하면 NULL 값의 공간을 차지합니다. VARCHAR2 데이터 유형의 경우 NULL 값에 대한 공간을 차지하지 않습니다. 예를 들어
name varchar(10)
이름이 'Ravi__'인 경우에도 6 바이트의 메모리를 예약하지만
name varchar2(10)
입력 문자열의 길이에 따라 공간을 예약합니다. 예를 들어, 'Ravi__'에 대한 4 바이트 메모리.
여기서 _는 NULL을 나타냅니다.
참고 : varchar는 null 값을위한 공간을 예약하고 varchar2는 null 값을위한 공간을 예약하지 않습니다.
VARCHAR
와 혼동된다고 생각합니다 CHAR
.
현재는 동일합니다. 하지만 이전에는
VARCHAR
NULL
ANSI 표준에서 규정 한대로 앞으로는 빈 문자열과 구별을 지원하기 위해 Oracle에서 예약합니다 .
VARCHAR2
NULL
빈 문자열과 빈 문자열을 구별하지 않으며 결코하지 않습니다.
Emp_name varchar(10)
-10 자리 미만의 값을 입력하면 남은 공간을 삭제할 수 없습니다. 총 10 개의 공간을 사용했습니다.
Emp_name varchar2(10)
-10 자리 미만의 값을 입력하면 남은 공간이 자동으로 삭제됩니다.
create table deleteme_table(v varchar(10), v2 varchar2(10)); insert into deleteme_table (v, v2) values ('abc','abc'); select v, length(v), v2, length(v2) from deleteme_table;