length sql oracle varchar2

sql - length - Impacto de definir la columna VARCHAR2 con mayor longitud



varchar max length (3)

¿Cuáles son los efectos de definir una columna con VARCHAR2(1000) lugar de VARCHAR2(10) en Oracle, cuando los valores no superan los 10 bytes?

¿La columna solo ocupa el espacio realmente necesario para almacenar los valores, o eso tendría algún impacto negativo en el tamaño / rendimiento de los espacios de tablas / índices?


Defina el tamaño de la columna como la longitud máxima que está preparado para tratar. Para una tabla de preparación, donde estoy cargando un archivo en la base de datos, puedo usar VARCHAR2 (4000). Luego, una vez que todos los datos están en la base de datos, puedo hacer las validaciones que necesito (tipos de datos, longitudes de datos, valores mínimos / máximos, caracteres aceptables ...) y pasar los valores válidos a una columna con la definición adecuada / restricciones

Puedo aprovechar el registro de errores de DML para que los datos que no se ajusten a la definición / restricciones se bombeen a una tabla de rechazo sin ningún tipo de codificación fila por fila.

Si tienes un VARCHAR2 (1000), en algún momento obtendrás datos que sean más largos de lo que esperas (por ejemplo, puedes obtener una cadena de 10 caracteres pero que tiene 14 bytes porque algunos caracteres son de varios bytes) valores.)


En la base de datos, no hay diferencia. VARCHAR2 se almacenan con longitud variable, la longitud declarada es solo una limitación.

Sin embargo, algunas aplicaciones cliente reservarán 1000 bytes por columna en lugar de 10 si ven que la columna está definida como VARCHAR2(1000)


La respuesta depende de si se trata de una columna en una tabla de base de datos o una variable en un programa PL / SQL.

Columna de base de datos

La cantidad de almacenamiento utilizado es proporcional al tamaño de los datos almacenados.

Variable PL / SQL

Si la variable se declara con un tamaño de 1 a 3999 (11g +) / 1999 (10g o anterior), la memoria se asignará para la longitud máxima (es decir, VARCHAR2 (100) requerirá al menos 100 bytes de memoria).

Si la variable se declara con un tamaño 4000 (11g +) / 2000 (10g o anterior) o mayor, la memoria se asignará de acuerdo con el tamaño de los datos almacenados. (una pregunta lateral interesante sería, si se cambia el valor de la variable, ¿cómo se cambia el tamaño de la memoria? ¿Se reasigna otro búfer con el nuevo tamaño?)

Referencia para 10g: tipos de datos PL / SQL

Las variables pequeñas VARCHAR2 están optimizadas para el rendimiento, y las más grandes están optimizadas para un uso eficiente de la memoria. El punto de corte es de 2000 bytes. Para un VARCHAR2 de 2000 bytes o más, PL / SQL asigna dinámicamente solo la memoria suficiente para mantener el valor real. Para una variable VARCHAR2 que es más corta que 2000 bytes, PL / SQL preasigna la longitud declarada completa de la variable. Por ejemplo, si asigna el mismo valor de 500 bytes a una variable VARCHAR2 (2000 BYTE) y a una variable VARCHAR2 (1999 BYTE), la primera ocupa 500 bytes y la última ocupa 1999 bytes.