Pregunta

En Oracle, ¿cuál es la diferencia entre:

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

y

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)
¿Fue útil?

Solución

Supongamos que el juego de caracteres de la base de datos es UTF-8, que es la configuración recomendada en versiones recientes de Oracle.En este caso, algunos caracteres tardan más de 1 byte en almacenarse 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 en realidad no pueda almacenar 11 caracteres en el campo, porque algunos de ellos requieren más de un byte para almacenarse, 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.

Otros consejos

Uno tiene exactamente espacio para 11 bytes, el otro para exactamente 11 caracteres.Algunos conjuntos de caracteres, como las variantes Unicode, pueden utilizar más de un byte por carácter, por lo que el campo de 11 bytes puede tener espacio para menos de 11 caracteres, según la codificación.

Ver también http://www.joelonsoftware.com/articles/Unicode.html

Dependiendo de la configuración del sistema, el tamaño de CHAR medido en BYTES puede variar.En tus ejemplos:

  1. Limita el campo a 11 BYTE
  2. Limita el campo a 11 CARBONIZARSEactores


Conclusión:1 CHAR no es igual a 1 BYTE.

No estoy seguro porque no soy usuario de Oracle, pero supongo que la diferencia radica en el uso de conjuntos de caracteres multibyte como Unicode (UTF-16/32).En este caso, 11 Bytes podrían representar menos de 11 caracteres.

Además, esos tipos de campos pueden tratarse de manera diferente con respecto a los caracteres acentuados o mayúsculas y minúsculas, por ejemplo, 'binaryField(ete) = "été"' no coincidirá, mientras que 'charField(ete) = "été"' sí (nuevamente, no estoy seguro acerca de Oracle). .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top