VARCHAR2 (10 CHAR)와 NVARCHAR2 (10)의 차이점
기본 설정으로 Oracle Database 10g Express Edition (Universal)을 설치했습니다.
SELECT * FROM NLS_DATABASE_PARAMETERS;
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16
CHAR
및 NCHAR
데이터 유형 이 모두 다중 바이트 문자열을 허용하는 것처럼 보이는 경우이 두 열 정의의 정확한 차이점은 무엇입니까?
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
인코딩. 사용하는 문자를 저장합니다 . 또한의 최대 바이트 길이 는 구성된 국가 별 문자 집합에 따라 다릅니다.AL16UTF16
2 bytes
NVARCHAR2
VARCHAR2
의 최대 크기는VARCHAR2
바이트 또는 문자 일 수 있습니다. 열은 기본 문자 집합에만 문자를NVARCHAR2
저장할 수 있지만은 거의 모든 문자를 저장할 수 있습니다. 단일 문자에는 최대4 bytes
.
필드를 다음과 같이 정의합니다.
VARCHAR2(10 CHAR)
Oracle에 각 문자를 저장하는 데 필요한 바이트 수에 관계없이 10 문자를 저장할 수있는 충분한 공간을 사용할 수 있다고 말합니다. 단일 문자에는 최대4 bytes
.NVARCHAR2(10)
Oracle에 문자2 bytes
당 10 개의 문자를 저장할 수 있다고 알려줍니다.
요약하자면:
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
'programing' 카테고리의 다른 글
Java에서 인터페이스가 필요한 이유는 무엇입니까? (0) | 2021.01.14 |
---|---|
Html.EditorFor additionalViewData (0) | 2021.01.14 |
SQL 고유 varchar 대소 문자 구분 질문 (0) | 2021.01.14 |
XML의 따옴표. (0) | 2021.01.14 |
Android AudioRecord 예 (0) | 2021.01.14 |