Indagamos en distintos sitios y así darte la solución a tu duda, si continúas con alguna duda déjanos tu inquietud y te responderemos sin falta.
Solución:
Hay un límite de 4000 bytes, no de 4000 caracteres. Por lo tanto, NVARCHAR2(4000) con un juego de caracteres nacional AL16UTF16 ocuparía el máximo de 4000 bytes.
De los documentos de Oracle de MAX_STRING SIZE:
Las tablas con columnas virtuales se actualizarán con nuevos metadatos de tipos de datos para columnas virtuales de tipo VARCHAR2(4000), NVARCHAR2 de 4000 bytes o RAW(2000).
Solución:-
Además, si desea almacenar 4000 caracteres, le recomendaría que use CLUB
Un CLOB (objeto grande de caracteres) es un tipo de datos de Oracle que puede contener hasta 4 GB de datos. Los CLOB son útiles para almacenar texto.
Puede intentar así cambiar el tipo de datos de la columna a 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;
Primero, como han señalado otros, a menos que esté usando 12.1, ambos varchar2
y nvarchar2
los tipos de datos están limitados en SQL a 4000 bytes. En PL/SQL, están limitados a 32767. En 12.1, puede aumentar el límite de SQL a 32767 usando el MAX_STRING_SIZE
parámetro.
En segundo lugar, a menos que esté trabajando con una base de datos heredada que usa un juego de caracteres que no es Unicode y que no se puede actualizar para usar un juego de caracteres Unicode, querrá evitar nvarchar2
y nchar
tipos de datos en Oracle. En SQL Server, usas nvarchar
cuando desee almacenar datos Unicode. En Oracle, la preferencia es usar varchar2
en una base de datos cuyo conjunto de caracteres admita Unicode (generalmente AL32UTF8
) cuando desee almacenar datos Unicode.
Si almacena datos Unicode en un Oracle NVARCHAR2
columna, se usará el juego de caracteres nacional; esto es casi seguro AL16UTF16
lo que significa que cada carácter requiere al menos 2 bytes de almacenamiento. UN NVARCHAR2(4000)
, por lo tanto, probablemente no pueda almacenar más de 2000 caracteres. Si usas un VARCHAR2
columna, por otro lado, puede usar un conjunto de caracteres Unicode de ancho variable (AL32UTF8
) en cuyo caso, los caracteres ingleses generalmente requieren solo 1 byte, la mayoría de los caracteres europeos requieren 2 bytes y la mayoría de los caracteres asiáticos requieren 3 bytes (esto es, por supuesto, solo una generalización). Eso generalmente le permitirá almacenar sustancialmente más datos en un VARCHAR2
columna.
Si necesita almacenar más de 4000 bytes de datos y está usando Oracle 11.2 o posterior, tendrá que usar un LOB
tipo de datos (CLOB
o NCLOB
).
Si haces scroll puedes encontrar las críticas de otros creadores, tú también tienes el poder insertar el tuyo si lo crees conveniente.