2010-07-01 17 views
33

Sé que el differnce entre CHAR y VARCHAR,¿Por qué debería elegir alguna otra longitud que no sea 255 para varchar en MySQL?

CHAR - Longitud fija

VARCHAR - Longitud variable (tamaño + 1 byte)

pero quería saber cuál era el Purpse de tener la opción de una longitud varchar, por ejemplo VARCHAR(50), VARCHAR(100), VARCHAR(255)

Esto me parece inútil porque el espacio real utilizado depende del valor almacenado en la base de datos.

Así que mis preguntas son:

1) Está bien para establecer todos los de a 255 2) ¿Por qué quieres para especificar cualquier otra longitud de mi varchar?

+1

posible duplicado de [¿Hay desventajas al usar un varchar genérico (255) para todos los campos basados ​​en texto?] (Http://stackoverflow.com/questions/262238/are-there-disadvantages-to-using-a -generic-varchar255-for-all-text-based-fields) –

+0

Además, http://stackoverflow.com/questions/1262174/mysql-why-use-varchar20-instead-of-varchar255 –

+6

Siempre pensé que la documentación de MySQL era bastante bueno para explicar la diferencia: http://dev.mysql.com/doc/refman/5.0/en/char.html –

Respuesta

21

1) Si no desea limitar el tamaño máximo de un varchar almacenado, entonces sí, está bien. Dicho esto ...

2) En muchos casos, desea establecer un límite superior para el tamaño de un varchar. Digamos que está almacenando una lista de correo y tiene una cantidad limitada de espacio para una línea de dirección. Al establecer un límite superior para su campo de dirección, ahora permite que la base de datos imponga una longitud de línea de dirección máxima para usted.

19

Extracto del MySQL documentation:

Los tipos CHAR y VARCHAR son similares, pero difieren en la forma en que se almacenan y recuperan. A partir de MySQL 5.0.3, también difieren en longitud máxima y en si se conservan los espacios finales.

Los tipos CHAR y VARCHAR se declaran con una longitud que indica la cantidad máxima de caracteres que desea almacenar. Por ejemplo, CHAR (30) puede contener hasta 30 caracteres.

La longitud de una columna CHAR se fija a la longitud que declara cuando crea la tabla. La longitud puede ser cualquier valor de 0 a 255. Cuando se almacenan los valores de CHAR, se rellenan con espacios a la longitud especificada. Cuando se recuperan los valores CHAR, se eliminan los espacios finales.

Los valores en las columnas VARCHAR son cadenas de longitud variable. La longitud se puede especificar como un valor de 0 a 255 antes de MySQL 5.0.3 y de 0 a 65.535 en 5.0.3 y versiones posteriores. La longitud máxima efectiva de un VARCHAR en MySQL 5.0.3 y posterior está sujeta al tamaño máximo de fila (65.535 bytes, que se comparte entre todas las columnas) y al juego de caracteres utilizado.

En contraste con CHAR, los valores VARCHAR se almacenan como un prefijo de un byte o de dos bytes más los datos. El prefijo de longitud indica la cantidad de bytes en el valor. Una columna utiliza un byte de longitud si los valores no requieren más de 255 bytes, dos bytes de longitud si los valores pueden requerir más de 255 bytes.

+6

Tenga en cuenta que se vincula a la fuente cuando cita. –

+0

Una pequeña corrección: la documentación vinculada dice 'VARCHAR' tiene un límite superior de 65.535 para MySQL> = 5.0.3. Citando: "' La longitud se puede especificar como un valor de 0 a 255 antes de MySQL 5.0.3 y de 0 a 65.535 en 5.0.3 y versiones posteriores. " – jweyrich

1

1) Técnicamente está bien, porque los campos se crean con solo 1 o 2 bytes de longitud al principio. Después, crecerán según sea necesario.

2) Sin embargo, los buenos principios de diseño sugieren que establezca las longitudes de campo apropiadamente así a) Si alguien sigue el esquema de la tabla e intenta calcular cuántos datos se almacenan en campos específicos, pueden ver esa cierta los campos contendrán menos datos que otros yb) puede evitar pequeñas cantidades de trabajo extra realizado por el motor de base de datos porque tiene que truncar menos espacio de un campo VARCHAR (10) que un VARCHAR (255) durante una inserción.

Puede ver detalles adicionales sobre él aquí:

http://dev.mysql.com/doc/refman/5.0/en/char.html

1

He leído en otro lugar que varchar viene con un impacto en el rendimiento con respecto a char, cuando se ejecuta selecciona contra las columnas definidas con ellos. Por lo tanto, tal vez desee elegir char, si está seguro de que el campo siempre tendrá cierta longitud, y tiene problemas de rendimiento ...

+0

Me gustaría ver una referencia para este reclamo. – dotancohen

+0

Bastante, y yo le daría una, solo este comentario fue hace más de tres años, y ni siquiera puedo recordar dónde lo vi. –

0

1) Sí.

2) Históricamente fue un éxito de rendimiento.

Observe bases de datos como sqlite que almacenan todo como texto para evidenciar que ya no importa.

+4

sqlite no es exactamente una base de datos de alto rendimiento, y varchar es un golpe de rendimiento si obliga al tamaño de la fila a ser variable. – qdot

+0

Sí, pero para la mayoría de las personas y la mayoría de los usos es lo suficientemente rápido –

+4

Verdadero, pero afirmar que 'ya no' importa y usar sqlite como el pináculo de la ingeniería de bases de datos es realmente engañoso. Y no, para la mayoría de las personas y la mayoría de los usos no es lo suficientemente rápido: es simplemente el más fácil de configurar y supera los costos, al menos inicialmente ... siempre que nunca tenga solicitudes simultáneas de más de un usuario, es decir. – qdot

4

CHAR VARCHAR Vs

CHAR se utiliza para la longitud fija de tamaño variable.
VARCHAR se utiliza para Variable Variable Size Variable.

E.g.

create table emp 
(f_name CHAR(20), 
l_name VARCHAR(20) 
); 

insert into emp values('Suraj','Chandak'); 

select length(f_name), length(l_name) from emp; 

Output will be 

length(f_name)   Length(l_name) 
    20      7 

La mejor respuesta para CHAR vs VARCHAR

Editar

  • Puede establecer el límite superior máximo para la columna.
  • El rendimiento y el almacenamiento pueden tener efecto.

Gracias.

+0

La pregunta es "1) Está bien establecer todos mis varchar's en 255 2) ¿Por qué querrías especificar otra longitud?", No CHAR vs VARCHAR. – Davor

0

La principal diferencia entre estos dos tipos de valores se aplica al hacer una comparación entre cadenas.

En una columna CHAR cuya longitud está predefinida, tendrá que "ejecutar" todo el camino a lo largo de la columna, mientras que en la columna VARCHAR deberá "ejecutar" todo el largo del valor y no longitud de la columna, que es mucho más rápido en la mayoría de los casos.

Por lo tanto, una longitud de valor menor que la longitud del campo se comparará más rápido si se almacena en un campo VARCHAR.

0

Pero quería saber cuál era el propósito de tener la opción de una longitud varchar, por ejemplo. VARCHAR (50), VARCHAR (100), VARCHAR (255)

Esto me parece inútil porque el espacio real utilizado depende del valor almacenado en la base de datos.

Especificando p. VARCHAR (5) en lugar de VARCHAR (500) puede brindarle un mejor rendimiento en algunos casos, p. para operaciones que usan tablas temporales en memoria.

Otro caso es restringir longitud de la columna para complementar los requisitos de dominio (cuando su valor no debe ser mayor que algún máximo Ejemplo:. Nombre de dominio completo en DNS no puede exceder la longitud de 253 caracteres)

3

Las tablas de longitud fija (estática) son más rápidas. Cuando cada columna individual en una tabla es de "longitud fija", la tabla también se considera "estática" o "longitud fija". Los ejemplos de tipos de columnas que NO son de longitud fija son: VARCHAR, TEXT, BLOB.

http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

lo tanto, si la tabla no tiene ningún otros campos que son varchar, texto o blob; puedes usar char y hacer que tu tabla sea estática. De esa forma son más rápidos.

+1

Esa respuesta no tiene nada que ver con la pregunta que se hace aquí. – Davor

+0

y tienes razón. No recuerdo por qué publiqué esa respuesta. Tal vez en ese momento, estaba buscando algo relacionado. Tal vez él editó su pregunta? – musafar006

+0

Dunno, podría ser. No sé cómo ver su historial de edición, o si tengo suficiente reputación para verlo en primer lugar. – Davor

Cuestiones relacionadas