telefono - tipos de datos en mysql workbench
¿Por qué debería elegir alguna otra longitud que no sea 255 para varchar en MySQL? (9)
Sé la diferencia entre CHAR y VARCHAR,
CHAR - Longitud fija
VARCHAR - Longitud variable (tamaño + 1 byte)
Pero quería saber cuál era el objetivo 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.
Entonces mis preguntas son:
1) Está bien establecer todos mis varchar en 255 2) ¿Por qué querrías especificar cualquier otra longitud?
Pero quería saber cuál era el objetivo 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.
Especificar, por ejemplo, VARCHAR (5) en lugar de VARCHAR (500) puede proporcionarle un mejor rendimiento en algunos casos, por ejemplo, para operaciones que utilizan tablas temporales en memoria.
Otro caso es restringir la longitud de la columna para complementar los requisitos del dominio (cuando su valor no debe ser mayor que un máximo. Ejemplo: el nombre de dominio completo en DNS no puede exceder la longitud de 253 caracteres)
Las tablas de longitud fija (estática) son más rápidas. Cuando cada columna de 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/
Entonces, si su tabla no tiene otros campos que sean varchar, text o blob; puedes usar char y hacer que tu tabla sea estática. De esa forma son más rápidos.
1) Sí.
2) Históricamente fue un golpe de rendimiento.
Mire bases de datos como sqlite que almacenan todo como texto para evidenciar que ya no importa.
1) Si no quiere limitar el tamaño máximo de un varchar almacenado, entonces sí, está bien. Habiendo dicho eso...
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.
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) Una vez dicho esto, los buenos principios de diseño sugieren que establezca las longitudes de campo apropiadamente, por lo que a) Si alguien sigue el esquema de la tabla e intenta calcular cuántos datos se almacenan en campos particulares, pueden ver que ciertos 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 al respecto aquí:
Extracto de la dev.mysql.com/doc/refman/5.0/en/char.html :
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 declaras cuando creas 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.
A diferencia de CHAR, los valores de VARCHAR se almacenan como un prefijo de un byte o de dos bytes más 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.
He leído en otro lugar que varchar viene con un hit de rendimiento relativo a char, cuando se ejecutan selecciones contra columnas definidas con ellos. Por lo tanto, tal vez quiera elegir char, si está seguro de que el campo siempre tendrá cierta longitud, y tiene problemas de rendimiento ...
La principal diferencia entre estos dos tipos de valores se establece 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 camino a lo largo de la longitud del valor y no de la columna, lo que es mucho más rápido en la mayoría de los casos.
Por lo tanto, una longitud de valor que sea menor que la longitud del campo se comparará más rápido si se almacena en un campo VARCHAR.
CHAR Vs VARCHAR
CHAR
se utiliza para la variable de tamaño de longitud fija.
VARCHAR
se utiliza para Variable Variable Size Variable.
P.ej
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 máximo máximo para la columna.
- El rendimiento y el almacenamiento pueden tener efecto.
Gracias.