Oracle의 VARCHAR과 VARCHAR2 데이터 유형의 차이점은 무엇입니까?


답변:


26

오라클은 한 번에 다른 정의를 제공 할 계획이 있었다 것으로 보인다 VARCHAR를 보다는 VARCHAR2를 . 고객에게 이것을 말했으며 VARCHAR 사용을 권장하지 않습니다 . 그들의 계획이 무엇이든, 11.2.0.2부터 VARCHARVARCHAR2와 동일합니다 . 다음은 SQL Language Reference 11g Release 2의 내용입니다.

VARCHAR 데이터 유형을 사용하지 마십시오. 대신 VARCHAR2 데이터 유형을 사용하십시오. VARCHAR 데이터 유형은 현재 VARCHAR2와 동의어이지만 VARCHAR 데이터 유형은 다른 비교 시맨틱과 비교하여 가변 길이 문자열에 사용되는 별도의 데이터 유형으로 다시 정의되도록 스케줄됩니다.

PL / SQL 사용자 가이드 및 참조 10g 릴리스 2 박았을이 방법 :

현재 VARCHAR은 VARCHAR2와 동의어입니다. 그러나 PL / SQL의 향후 릴리스에서는 새로운 SQL 표준을 수용하기 위해 VARCHAR이 다른 비교 의미론을 가진 별도의 데이터 유형이 될 수 있습니다. VARCHAR 대신 VARCHAR2를 사용하는 것이 좋습니다.

데이터베이스 개념 10g 릴리스 2 문서는 강한 측면에서 같은 일을 말한다 :

VARCHAR 데이터 유형은 VARCHAR2 데이터 유형과 동의어입니다. 동작의 가능한 변경을 피하려면 항상 VARCHAR2 데이터 유형을 사용하여 가변 길이 문자열을 저장하십시오.

Oracle 9.2와 8.1.7 문서는 본질적으로 동일한 것을 말하고 있으므로 Oracle은 VARCHAR 사용을 계속 권장하지 않지만 VARCHAR2 와의 패리티를 변경하기 위해 아무런 조치도 취하지 않았습니다 .


Oracle 8i에서 varchar2를 기억하지만 그것이 varchar와 같은지 확실하지 않습니다.
bernd_k


8i 이전의 어느 시점에서 정의가 다를 수 있다는 표시가 있습니다.
레이 리펠

나는 varchar버전 8 이전 에는 길이 제한이 다르다고 생각 했지만, 이것을 백업할만한 평판을 얻지 못했고 이제 신화인지 궁금합니다.
잭 더글러스

@Jack Douglas-Oracle 7 설명서에서 이에 대한 내용을 찾을 수 없습니다. 에서 docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> 오라클 7 서버 >> 서버 개념 >> 오라클 데이터 유형 (직접 링크 할 수 없습니다) 이후로 거의 같은 일을 말한다 버전. 버전 7 문서의 다른 섹션에서는 버전 6에서 Varchar 및 Varchar2가 char의 동의어라고 말합니다.
레이 리펠

25

현재이 둘은 동의어입니다.

VARCHAR은 ANSI 표준 데이터 유형이지만 Oracle의 VARCHAR 데이터 유형 구현은 빈 문자열을 NULL로 간주하여 ANSI 표준을 위반합니다 (Oracle의 구현은 ANSI 표준보다 우선). Leigh가 지적했듯이 Oracle은 VARCHAR 데이터 유형의 의미가 빈 문자열이 처리되는 방식과 관련하여 향후 변경 될 수 있다고 언급했습니다. 이런 경우가 발생하면 VARCHAR2 데이터 유형의 의미는 동일하게 유지됩니다. VARCHAR2 데이터 유형을 사용하면 향후 버전의 Oracle에서 빈 문자열이 더 이상 NULL로 간주되지 않아 코드가 손상 될 염려가 없으므로 더 안전합니다.


3

원래 SQL 표준에서 VARCHAR은 255 자였으며 Oracle은 그 당시 표준 준수에 대해 최소한 찔렀습니다.


그것은 몇 년 안에 Oracle varchar3 (max)를 볼 수있는 희망을줍니다.
bernd_k

SQL Server는 허용 길이를 255에서 8000 (현재는 최대)까지 늘리는 데 아무런 문제가 없었습니다. Oracle에 다른 데이터 유형이 필요한 이유
bernd_k

1
필요가 없습니다 varchar(max).CLOB
a_horse_with_no_name

3
CLOB는 VARCHAR2와 다른 의미를 가짐
Gaius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.