Supongamos que el conjunto de caracteres de la base de datos es UTF-8, que es la configuración recomendada en las versiones recientes de Oracle. En este caso, algunos caracteres toman más de 1 byte para almacenar en la base de datos.
Si define el campo como VARCHAR2(11 BYTE)
, Oracle puede usar hasta 11 bytes para el almacenamiento, pero es posible que no pueda almacenar 11 caracteres en el campo, porque algunos de ellos llevan más de un byte a almacenar, p. caracteres no ingleses
Al definir el campo como VARCHAR2(11 CHAR)
, le dice a Oracle que puede usar suficiente espacio para almacenar 11 caracteres, sin importar cuántos bytes se necesiten para almacenar cada uno. Un solo carácter puede requerir hasta 4 bytes.
Tenga en cuenta que la semántica de la longitud del carácter no afecta a la longitud máxima de 4000 bytes para un 'VARCHAR2'. Declarar un 'VARCHAR2 (4000 CHAR)' permitirá menos de 4000 caracteres si algunos de los caracteres requieren múltiples bytes de almacenamiento. –
@David Sykes ¿Es esto semánticamente lo mismo con NVARCHAR (11)? – Nap
@Nap No es tan lejos como sé. Creo que el parámetro de tamaño en la declaración de tipo NVARCHAR tiene el mismo significado que en VARCHAR2. es decir, para garantizar suficiente espacio de almacenamiento para 11 caracteres (no bytes) en el juego de caracteres NVARCHAR, diría NVARCHAR (11 CHAR). NOTA: en realidad no he comprobado esto. Nunca he usado NVARCHAR. –