sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuáles son los casos de uso para seleccionar CHAR sobre VARCHAR en SQL?

La regla general es elegir CHAR si todas las filas tendrán cerca de la misma longitud . Elija VARCHAR (o NVARCHAR ) cuando la longitud varía significativamente. CHAR también puede ser un poco más rápido porque todas las filas tienen la misma longitud.

Varía según la implementación de la base de datos, pero generalmente VARCHAR (o NVARCHAR ) usa uno o dos bytes más de almacenamiento (para longitud o terminación) además de los datos reales. Entonces (asumiendo que está usando un conjunto de caracteres de un byte) almacenando la palabra "FooBar"

  • CARÁCTER(6) =6 bytes (sin sobrecarga)
  • VARCHAR(100) =8 bytes (2 bytes de sobrecarga)
  • CARÁCTER(10) =10 bytes (4 bytes de desperdicio)

El resultado final es CHAR puede ser más rápido y más ahorro de espacio para datos de relativamente la misma longitud (con una diferencia de longitud de dos caracteres).

Nota :Microsoft SQL tiene 2 bytes de sobrecarga para un VARCHAR. Esto puede variar de una base de datos a otra, pero generalmente se necesita al menos 1 byte de sobrecarga para indicar la longitud o el EOL en un VARCHAR.

Como señaló Gaven en los comentarios:Las cosas cambian cuando se trata de conjuntos de caracteres de varios bytes, y es un caso en el que VARCHAR se convierte en una opción mucho mejor.

Una nota sobre la longitud declarada del VARCHAR :Debido a que almacena la longitud del contenido real, entonces no desperdicia la longitud no utilizada. Así que almacenar 6 caracteres en VARCHAR(6), VARCHAR(100), o VARCHAR(MÁX.) utiliza la misma cantidad de almacenamiento. Lea más sobre las diferencias al usar VARCHAR(MAX). Declaras un máximo tamaño en VARCHAR para limitar cuánto se almacena.

En los comentarios, AlwaysLearning señaló que los documentos de Microsoft Transact-SQL parecen decir lo contrario. Sugeriría que es un error o al menos los documentos no están claros.