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
'programing' 카테고리의 다른 글
puppeteer: 다음 줄로 계속하기 전에 N초 대기 (0) | 2023.08.10 |
---|---|
한 기능에서 선언된 연합 유형을 다른 기능에서 사용하는 것이 잘못된 이유는 무엇입니까? (0) | 2023.08.10 |
연결을 거부하는 Mariadbat 동기화 (0) | 2023.08.10 |
경고 대화 상자가 화면 크기의 90%를 채우도록 만드는 방법은 무엇입니까? (0) | 2023.08.10 |
IntelliJ의 Shelve와 Gitstash의 차이점은 무엇입니까? (0) | 2023.08.10 |