Saltar al contenido

Oracle Insert Into NVarchar2 (4000) no permite 4000 caracteres?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *