¿Por qué VARCHAR necesita especificación de longitud?

¿Por qué siempre necesitamos especificar VARCHAR(length) lugar de simplemente VARCHAR ? Es dynamic de todos modos.

UPD: estoy desconcertado específicamente por el hecho de que es obligatorio (por ejemplo, en MySQL).

La "longitud" de VARCHAR no es la longitud de los contenidos, es la longitud máxima de los contenidos.

La longitud máxima de un VARCHAR no es dinámica, es fija y, por lo tanto, debe especificarse.

Si no quiere definir un tamaño máximo para él, entonces use VARCHAR (MAX).

En primer lugar, no lo necesita en todas las bases de datos. Mire SQL Server , donde es opcional.

Independientemente, define un tamaño máximo para el contenido del campo. No es algo malo en sí mismo, y transmite significado (por ejemplo, numbers de teléfono, donde no se desean numbers internacionales en el campo).

Puedes verlo como una restricción en tus datos. Asegura que no almacene datos que violen su restricción. Es conceptualmente similar a, por ejemplo, una restricción de verificación en una columna entera que asegura que solo se ingresen valores positivos.

Cuanto más sepa la database sobre los datos que está almacenando, más optimizaciones puede hacer al search / agregar / actualizar datos con las requestes.

Existe un posible impact en el performance: en MySQL, temporary tables y las temporary tables MEMORY tables almacenan una columna VARCHAR como una columna de longitud fija, acolchada a su longitud máxima.

Si diseña columnas VARCHAR mucho más grandes que el tamaño más grande que necesita, consumirá más memory de la que necesita. Esto afecta la cache efficiency, sorting speed , etc.

Así que le das la longitud máxima que está debajo de tu string. como si tu longitud máxima de personaje es 10, así que no le des a su longitud 100 o más.

De la Wikipedia :

Los campos Varchar pueden ser de cualquier tamaño hasta el límite. El límite difiere de los types de bases de datos, una database Oracle 9i tiene un límite de 4000 bytes, una database MySQL tiene un límite de 65.535 bytes (para toda la fila) y Microsoft SQL Server 2005 8000 bytes (a less que se use varchar (max) que tiene una capacidad máxima de almacenamiento de 2.147.483.648 bytes).

La respuesta es que no es necesario, es opcional.

Está ahí si desea asegurarse de que las cadenas no superen una determinada longitud.