programing

Oracle Insert In Nvarchar2(4000)는 4000자를 허용하지 않습니까?

lastmoon 2023. 8. 10. 19:08
반응형

Oracle Insert In Nvarchar2(4000)는 4000자를 허용하지 않습니까?

필드 데이터 유형이 NVarchar2(4000)인 테이블이 있습니다. SQL 서버에서 Oracle 서버로 데이터를 이동합니다.SQL Server 데이터 유형도 nvarchar(4000)입니다.SQL Server 쪽에서 이 필드의 MAX Size를 확인했는데 MAX는 4000자 제한에 4자 부족한 3996입니다.

이 데이터를 Oracle에 삽입하려고 하면 크기로 인해 "LONG" 오류가 발생합니다.

Oracle Nvarchar2(4000)는 4000자를 허용하지 않습니까?그렇지 않다면, 제한이 무엇입니까, 아니면 어떻게 하면 이것을 피할 수 있습니까?

4000자가 아닌 4000바이트의 제한이 있습니다.따라서 AL16UTF16 국가 문자 집합이 있는 NVARCHAR2(4000)는 최대 4000바이트를 차지합니다.

MAX_STRING SIZE의 오라클 문서에서:

가상 열이 있는 테이블은 VARCHAR2(4000), 4000바이트 NVARCHAR2 또는 RAW(2000) 유형의 가상 열에 대한 새 데이터 유형 메타데이터로 업데이트됩니다.

해결책:-

또한 4000자를 저장하고 싶다면 CLOB를 사용하는 것을 추천합니다.

CLOB(Character Large Object)는 최대 4GB의 데이터를 저장할 수 있는 Oracle 데이터 유형입니다.CLOB는 텍스트를 저장하는 데 유용합니다.

다음과 같이 열 데이터 유형을 CLOB로 변경할 수 있습니다.

ALTER TABLE table_name
 ADD (tmpcolumn  CLOB);

UPDATE table_name SET tmpcolumn =currentnvarcharcolumn;
COMMIT;

ALTER TABLE table_name DROP COLUMN currentnvarcharcolumn;

ALTER TABLE table_name
RENAME COLUMN tmpcolumn TO whatevernameyouwant;

첫째, 다른 사람들이 지적했듯이 12.1을 사용하지 않는 한 두 가지 모두varchar2그리고.nvarchar2데이터 유형은 SQL에서 4000바이트로 제한됩니다.PL/SQL에서는 32767로 제한됩니다.12.1에서는 매개 변수를 사용하여 SQL 제한을 32767로 늘릴 수 있습니다.

둘째, 유니코드 문자 집합을 사용하도록 업그레이드할 수 없는 유니코드가 아닌 문자 집합을 사용하는 레거시 데이터베이스를 사용하지 않는 한, 다음과 같은 작업을 수행하지 않을 수 있습니다.nvarchar2그리고.nchar오라클의 데이터 유형입니다.SQL Server에서 다음을 사용합니다.nvarchar유니코드 데이터를 저장할 때 사용합니다.Oracle의 경우 기본 설정은varchar2문자 집합이 유니코드를 지원하는 데이터베이스에서(일반적으로)AL32UTF8유니코드 데이터를 저장할 때 사용합니다.

유니코드 데이터를 오라클에 저장하는 경우NVARCHAR2열, 국가 문자 집합이 사용될 것입니다. 이것은 거의 확실합니다.AL16UTF16즉, 모든 문자에는 최소 2바이트의 저장 공간이 필요합니다.NVARCHAR2(4000)따라서 2000자 이상은 저장할 수 없습니다.를 사용하는 경우VARCHAR2 집합반면에가, 열너유드문니코자다수있사습니용할집합을비변은▁(▁set반)을 할 수 .AL32UTF8영어 문자가 일반적으로 1바이트만 필요한 경우, 대부분의 유럽 문자는 2바이트, 대부분의 아시아 문자는 3바이트를 필요로 합니다(물론, 이것은 단지 일반화일 뿐입니다).이를 통해 일반적으로 데이터를 훨씬 더 많이 저장할 수 있습니다.VARCHAR2기둥.

LOB자료형)CLOB또는NCLOB).

설명서에 따르면 너비는 문자 수를 의미하지만 4,000바이트 제한이 있습니다.

문자 데이터 유형 NVARCHAR2의 폭 사양은 문자 수를 나타냅니다.허용되는 최대 열 크기는 4000바이트입니다.

아마 4개의 멀티바이트 문자가 있을 것입니다.

언급URL : https://stackoverflow.com/questions/25452666/oracle-insert-into-nvarchar24000-does-not-allow-4000-characters

반응형