다른 DBMS에서 Oracle로 테이블을 마이그레이션 할 때 표준 작업 중 하나는 모든 VARCHAR(n)
필드를 VARCHAR2(n)
필드 (n <= 4000 제공 )로 바꾸는 것 입니다.
오라클은 왜 다른 DBMS가 VARCHAR2
아닌 이 데이터 유형을 호출 VARCHAR
합니까?
다른 DBMS에서 Oracle로 테이블을 마이그레이션 할 때 표준 작업 중 하나는 모든 VARCHAR(n)
필드를 VARCHAR2(n)
필드 (n <= 4000 제공 )로 바꾸는 것 입니다.
오라클은 왜 다른 DBMS가 VARCHAR2
아닌 이 데이터 유형을 호출 VARCHAR
합니까?
답변:
오라클은 한 번에 다른 정의를 제공 할 계획이 있었다 것으로 보인다 VARCHAR를 보다는 VARCHAR2를 . 고객에게 이것을 말했으며 VARCHAR 사용을 권장하지 않습니다 . 그들의 계획이 무엇이든, 11.2.0.2부터 VARCHAR 은 VARCHAR2와 동일합니다 . 다음은 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 와의 패리티를 변경하기 위해 아무런 조치도 취하지 않았습니다 .
varchar
버전 8 이전 에는 길이 제한이 다르다고 생각 했지만, 이것을 백업할만한 평판을 얻지 못했고 이제 신화인지 궁금합니다.
현재이 둘은 동의어입니다.
VARCHAR은 ANSI 표준 데이터 유형이지만 Oracle의 VARCHAR 데이터 유형 구현은 빈 문자열을 NULL로 간주하여 ANSI 표준을 위반합니다 (Oracle의 구현은 ANSI 표준보다 우선). Leigh가 지적했듯이 Oracle은 VARCHAR 데이터 유형의 의미가 빈 문자열이 처리되는 방식과 관련하여 향후 변경 될 수 있다고 언급했습니다. 이런 경우가 발생하면 VARCHAR2 데이터 유형의 의미는 동일하게 유지됩니다. VARCHAR2 데이터 유형을 사용하면 향후 버전의 Oracle에서 빈 문자열이 더 이상 NULL로 간주되지 않아 코드가 손상 될 염려가 없으므로 더 안전합니다.
원래 SQL 표준에서 VARCHAR은 255 자였으며 Oracle은 그 당시 표준 준수에 대해 최소한 찔렀습니다.
varchar(max)
.CLOB