programing

Oracle과 SQL Server의 NVARCHAR의 차이점은 무엇입니까?

closeapi 2023. 6. 20. 21:38
반응형

Oracle과 SQL Server의 NVARCHAR의 차이점은 무엇입니까?

일부 데이터를 sql 서버에서 오라클로 마이그레이션하고 있습니다.다음으로 정의된 열의 경우NVARCHARSQL 서버에서 만들기 시작했습니다.NVARCHAR비슷한 것으로 생각하는 오라클의 열..하지만 그들은 아닌 것처럼 보입니다.

스택 오버플로에 대한 게시물을 몇 개 읽었으며 결과를 확인하고 싶습니다.

데이터베이스 문자 집합이 AL32UTF8인 경우 Oracle VARCHAR2는 이미 유니코드를 지원합니다(이는 우리의 경우에도 해당됨).

SQL ServerVARCHAR 유니코드를 지원하지 않습니다.SQL Server에서 명시적으로 열을 필요로 함NCHAR/NVARCHAR데이터를 유니코드(특히 2바이트 UCS-2 형식)로 저장하는 type..

따라서 SQL Server NVARCHAR 열을 Oracle VARCHAR2 열로 마이그레이션할 수 있거나 마이그레이션해야 한다고 말하는 것이 맞습니까?

예, 오라클 데이터베이스가 유니코드 문자 집합을 사용하여 작성된 경우NVARCHARSQL Server에서 다음으로 마이그레이션해야 합니다.VARCHAR2오라클에서.오라클의 경우NVARCHAR데이터베이스 문자 집합이 유니코드를 지원하지 않는 경우 응용 프로그램이 유니코드 문자 집합을 사용하여 데이터를 저장할 수 있도록 데이터 유형이 존재합니다.

그러나 마이그레이션할 때 한 가지 주의해야 할 점은 문자 길이 의미론입니다.SQL Server에서 aNVARCHAR(20)UCS-2에서는 최대 40바이트가 필요한 20자의 공간을 할당합니다. Oracle에서는 기본적으로VARCHAR2(20)20바이트의 저장소를 할당합니다.에서AL32UTF8문자 집합, 그것은 잠재적으로 6자를 위한 충분한 공간이지만 훨씬 더 많은 것을 처리할 가능성이 높습니다(단일 문자).AL32UTF8에는 1-3바이트가 필요합니다.Oracle 유형을 다음과 같이 선언할 수 있습니다.VARCHAR2(20 CHAR)필요한 바이트 수에 관계없이 20자에 대한 공간을 할당할 것임을 나타냅니다.이는 20개의 문자열이 허용되는 반면 다른 10개의 문자열은 거부되는 이유를 설명하는 것보다 훨씬 더 의사소통하기 쉬운 경향이 있습니다.

길이 의미를 지정하지 않고 만든 테이블이 바이트 의미 대신 문자를 사용하도록 세션 수준에서 기본 길이 의미를 변경할 수 있습니다.

ALTER SESSION SET nls_length_semantics=CHAR;

그렇게 하면 타이핑을 피할 수 있습니다.CHAR새 열을 정의할 때마다 선택합니다.시스템 레벨에서 설정할 수도 있지만 NLS 팀은 이러한 설정을 권장하지 않습니다. Oracle이 제공하는 모든 스크립트가 데이터베이스에 대해 완벽하게 테스트된 것은 아닙니다.NLS_LENGTH_SEMANTICS변경되었습니다.타사 스크립트는 거의 없었습니다.

언급URL : https://stackoverflow.com/questions/18325015/difference-between-nvarchar-in-oracle-and-sql-server

반응형