2010-07-01 19 views
37

¿Por qué siempre necesitamos especificar VARCHAR(length) en lugar de solo VARCHAR? Es dinámico de todos modos.¿Por qué VARCHAR necesita especificación de longitud?

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

+2

Posible duplicado de http://stackoverflow.com/questions/2241238/why-does-oracle-varchar2-have-a-mandatory-size-as-a-definition-parameter/2244926#2244926 –

+0

Gracias, esto realmente es un duplicado – Fixpoint

Respuesta

10

En primer lugar, no lo necesita en todas las bases de datos. Mira 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, números de teléfono, donde no se desean números internacionales en el campo).

+3

Cierto, solo tenga cuidado al no definir el tamaño en SQL Server, ya que de manera predeterminada cambiará según el escenario, p. Ej. http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without-size.html – AdaTheDev

+0

"Cuando n no está especificado en una definición de datos o declaración de declaración de variable, la longitud predeterminada es 1 Cuando n no se especifica al usar las funciones CAST y CONVERT, la longitud predeterminada es 30. " desde el enlace mencionado –

1

De Wikipedia:

campos varchar pueden ser de cualquier tamaño hasta al límite. El límite difiere de tipos de bases de datos, Oracle 9i base de datos tiene un límite de 4000 bytes, una base de datos MySQL tiene un límite de 65.535 bytes (para toda la fila) y Microsoft SQL Server 2005 8000 bytes (a menos varchar (max) se usa, que tiene una capacidad de almacenamiento máxima de 2,147,483,648 bytes).

24

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, utilice VARCHAR (MAX).

+3

¿Por qué VARCHAR no significa por defecto VARCHAR (MAX)? INT tiene un tamaño predeterminado, entonces ¿por qué VARCHAR no puede tener el tamaño predeterminado? ¿Cuáles son las razones detrás de esta decisión de diseño tomada cuando se creó el estándar SQL? – Fixpoint

+1

VARCHAR (MAX) no existía cuando se crearon los estándares de SQL Server. Era varchar (8000) o texto. –

+0

VARCHAR (MAX) se maneja de manera diferente a VARCHAR (8000) (el tipo no máximo más grande) bajo el capó. Por favor, solo use VARCHAR (MAX) cuando realmente lo necesite o su rendimiento sufrirá. https://dba.stackexchange.com/questions/173895/understanding-varcharmax-8000-column-and-why-i-can-store-more-than-8000-charac – bobroxsox

3

Cuanto más sepa la base de datos sobre los datos que está almacenando, más optimizaciones puede hacer al buscar/agregar/actualizar datos con las solicitudes.

+4

Qué optimizaciones puede hacer en función de varchar max longitud, por ejemplo? – Fixpoint

1

La respuesta es usted no necesita, es opcional.

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

5

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

2

Hay rendimiento posible impact: en MySQL, temporary tables y MEMORY tables tienda de una columna VARCHAR como una columna de longitud fija, acolchado a su longitud máxima.

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

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

Cuestiones relacionadas