programing

VARCHAR2 (10 CHAR)와 NVARCHAR2 (10)의 차이점

goodcopy 2021. 1. 14. 23:16
반응형

VARCHAR2 (10 CHAR)와 NVARCHAR2 (10)의 차이점


기본 설정으로 Oracle Database 10g Express Edition (Universal)을 설치했습니다.

SELECT * FROM NLS_DATABASE_PARAMETERS;

NLS_CHARACTERSET               AL32UTF8                                 
NLS_NCHAR_CHARACTERSET         AL16UTF16                                

CHARNCHAR데이터 유형 이 모두 다중 바이트 문자열을 허용하는 것처럼 보이는 경우이 두 열 정의의 정확한 차이점은 무엇입니까?

VARCHAR2(10 CHAR)
NVARCHAR2(10)

NVARCHAR2의 데이터 형은 (VARCHAR2를 사용) 데이터베이스의 나머지 다른 문자 집합을 유지하면서 일부 열 유니 코드를 사용하려면 데이터베이스에 대한 오라클에 의해 소개되었다. NVARCHAR2는 유니 코드 전용 데이터 유형입니다.

NVARCHAR2를 사용하려는 한 가지 이유는 DB가 비 유니 코드 문자 집합을 사용하고 기본 문자 집합을 변경하지 않고 일부 열에 대한 유니 코드 데이터를 저장할 수 있기를 원할 수 있습니다. 또 다른 이유는 서로 다른 문자 집합이 동일한 데이터를 동일하게 효율적으로 저장하지 않기 때문에 두 개의 유니 코드 문자 집합 (대부분 서유럽에서 온 데이터의 경우 AL32UTF8, 아시아에서 주로 들어오는 데이터의 경우 AL16UTF16)을 사용하기를 원할 수 있습니다.

예제의 두 열 (유니 코드 VARCHAR2(10 CHAR)NVARCHAR2(10))은 동일한 데이터를 저장할 수 있지만 바이트 저장소는 다릅니다. 일부 문자열은 둘 중 하나에 더 효율적으로 저장 될 수 있습니다.

일부 기능은 NVARCHAR2에서 작동하지 않습니다.이 SO 질문을 참조하십시오.


  • NVARCHAR2저장 가변 길이 문자 데이터. NVARCHAR2열이 있는 테이블을 만들 때 최대 크기는 항상 문자 길이 의미 체계이며, 이는 NVARCHAR2데이터 유형에 대한 기본값이자 유일한 길이 의미 체계이기도합니다 .

    NVARCHAR2데이터 타입 용도의 AL16UTF16유니 코드 데이터를 인코딩 문자 세트 UTF-16인코딩. 사용하는 문자를 저장합니다 . 또한의 최대 바이트 길이 는 구성된 국가 별 문자 집합에 따라 다릅니다.AL16UTF162 bytesNVARCHAR2

  • VARCHAR2의 최대 크기는 VARCHAR2바이트 또는 문자 일 수 있습니다. 열은 기본 문자 집합에만 문자를 NVARCHAR2저장할 수 있지만은 거의 모든 문자를 저장할 수 있습니다. 단일 문자에는 최대 4 bytes.

필드를 다음과 같이 정의합니다.

  • VARCHAR2(10 CHAR)Oracle에 각 문자를 저장하는 데 필요한 바이트 수에 관계없이 10 문자를 저장할 수있는 충분한 공간을 사용할 수 있다고 말합니다. 단일 문자에는 최대 4 bytes.
  • NVARCHAR2(10)Oracle에 문자 2 bytes10 개의 문자를 저장할 수 있다고 알려줍니다.

요약하자면:

  • VARCHAR2(10 CHAR)최대 10 characters및 최대를 저장할 수 있습니다 40 bytes(구성된 국가 별 문자 집합에 따라 다름).

  • NVARCHAR2(10)최대 10 characters및 최대를 저장할 수 있습니다 20 bytes(구성된 국가 별 문자 집합에 따라 다름).

참고 : 문자 집합은 ,, .... UTF-8수 있습니다 UTF-16.

자세한 내용은 이 튜토리얼 을 참조하십시오.

좋은 하루 되세요!


Vincent Malgrat의 답변이 옳지 않다고 생각합니다. NVARCHAR2했다 도입 오랜 시간이 아무도 심지어 유니 코드에 대해 이야기하지 않았다 전.

처음에 Oracle은 현지화를 지원 VARCHAR2하고 제공했습니다 NVARCHAR2. 공통 데이터의 보류를했다 (PL / SQL 포함) VARCHAR2대부분, US7ASCII요즘. 그런 다음 애플리케이션의 공통 부분을 건드리지 않고 모든 국가의 각 고객에 대해 NLS_NCHAR_CHARACTERSET개별적으로 지원할 수 있습니다 (예 WE8ISO8859P1:).

요즘에는 AL32UTF8유니 코드를 완전히 지원하는 기본 문자 집합 이 있습니다. 내 생각에 오늘 더 이상 사용할 필요가 없다 NLS_NCHAR_CHARACTERSET, 즉 NVARCHAR2, NCHAR2, NCLOB. NVARCHAR2를 지원하지 않는 Oracle 기본 함수가 점점 더 많아 지므로 실제로 피해야합니다. 아마도 유일한 이유는 AL16UTF16.NET에 비해 스토리지를 덜 소비하는 아시아 문자를 주로 지원해야하는 경우 일 수 있습니다 AL32UTF8.


nVarchar2 는 유니 코드 전용 저장소입니다.

두 데이터 유형 모두 가변 길이 문자열 데이터 유형이지만 값을 저장하는 방법의 차이를 알 수 있습니다. 각 문자는 바이트로 저장됩니다. 아시다시피 모든 언어의 알파벳 길이가 같은 것은 아닙니다. 예를 들어 영어 알파벳은 문자 당 1 바이트가 필요하지만 일본어 또는 중국어와 같은 언어는 문자를 저장하는 데 1 바이트 이상이 필요합니다.

varchar2 (10) 을 지정하면 10 바이트 의 데이터 저장 될 것임을 DB에 알리는 것입니다. 그러나 nVarchar2 (10) 이라고하면 10 개의 문자 가 저장 된다는 의미 입니다. 이 경우 각 문자가 차지하는 바이트 수에 대해 걱정할 필요가 없습니다.

참조 URL : https://stackoverflow.com/questions/4508351/difference-between-varchar210-char-and-nvarchar210

반응형