mysql - datatype - varchar(255) vs tinytext/tinyblob y varchar(65535) vs blob/texto
mysql text size (2)
Por definición:
VARCHAR: el rango de Length es de 1 a 255 caracteres. Los valores de VARCHAR se ordenan y se comparan de forma insensible a las mayúsculas y minúsculas, a menos que se proporcione la palabra clave BINARY. x + 1 bytes
TINYBLOB, TINYTEXT: columna BLOB o TEXT con una longitud máxima de 255 (2 ^ 8 - 1) caracteres x + 1 bytes
En base a esto, creo la siguiente tabla:
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255),
`lastname` tinytext,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
¿O es mejor crear un varchar o tinytext y por qué ?
¿Es lo mismo para:
VARCHAR: el rango de Longitud es> 255 caracteres. Los valores de VARCHAR se ordenan y se comparan de forma insensible a las mayúsculas y minúsculas, a menos que se proporcione la palabra clave BINARY. x + 2 bytes
BLOB, TEXT Una columna BLOB o TEXT con una longitud máxima de 65535 (2 ^ 16 - 1) caracteres x + 2 bytes
DE: http://www.pythian.com/news/7129/text-vs-varchar/
A primera vista, parece que TEXT y VARCHAR pueden almacenar la misma información. Sin embargo, existen diferencias fundamentales entre la forma en que funcionan los campos TEXTO y VARCHAR, que es importante tener en cuenta.
Standard VARCHAR es en realidad parte del estándar ISO SQL: 2003; Los tipos de datos TEXT, incluido TINYTEXT, no son estándar.
Los tipos de datos TEXT de almacenamiento se almacenan como objetos separados de las tablas y conjuntos de resultados que los contienen. Este almacenamiento es transparente: no hay diferencia en cómo se escribe una consulta que involucra un campo TEXTO contra una que involucra un campo VARCHAR. Como TEXT no se almacena como parte de una fila, la recuperación de los campos de TEXT requiere una sobrecarga de memoria adicional [editada en 1/22].
Longitud máxima de VARCHAR La longitud máxima de fila de un VARCHAR está restringida por la longitud máxima de fila de una tabla. Esto es 65,535 bytes para la mayoría de los motores de almacenamiento (NDB tiene un valor de fila máximo diferente). Teóricamente, la longitud máxima de un VARCHAR es de 65.536 bytes. Overhead limita aún más el tamaño máximo real de un VARCHAR.
El almacenamiento de la longitud de un campo VARCHAR toma 1 byte si el campo VARCHAR tiene una longitud máxima de 0-255 bytes; si es mayor que 255 bytes, la sobrecarga para almacenar la longitud es de 2 bytes. Si el campo VARCHAR permite valores NULOS, eso agrega una sobrecarga adicional: cada tabla usa 1 byte de sobrecarga para cada conjunto de 8 campos que permiten valores NULOS. Si VARCHAR es la única fila en la tabla y no permite valores NULL, la longitud máxima permitida para VARCHAR es de 65.532 bytes.
Tenga en cuenta que el número en VARCHAR (x) representa el número de caracteres, no el número de bytes. Por lo tanto, puede tener dificultades para tratar de definir una tabla con solo VARCHAR (65532) si el juego de caracteres usa caracteres de varios bytes, como UTF-8.
Si intenta definir un valor VARCHAR que es más largo de lo permitido, se encontrará con un error como 1118 o 1074:
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs. ERROR 1074 (42000): Column length too big for column ''col_name'' (max=[max number here]); use BLOB or TEXT instead
Longitud máxima de TEXTO El tamaño máximo de un tipo de datos TEXTO depende del tipo de tipo de datos TEXTO que se esté utilizando. Debido a que se almacenan como objetos, la única tara de fila en el objeto de tabla es un puntero (8 o 16 bytes). Aquí hay una lista de la longitud máxima de TEXTO y la sobrecarga (en el objeto TEXTO):
TINYTEXT – up to 255 bytes, 1 byte overhead TEXT – up to 64 Kb, 2 bytes overhead MEDIUMTEXT – up to 16 Mb, 3 bytes overhead LONGTEXT – up to 4 Gb, 4 bytes overhead
VALORES PREDETERMINADOS MySQL no permite que los tipos de datos TEXT tengan un valor predeterminado que no sea NULO. Los campos VARCHAR pueden crearse con un valor DEFAULT.
Conclusiones Debido a las implicaciones de almacenamiento, es preferible usar VARCHAR en lugar de TINYTEXT.
Si necesita tener un valor DEFAULT que no sea NULL, debe usar VARCHAR (o CHAR).
Si necesita almacenar cadenas de más de 64 Kb, use MEDIUMTEXT o LONGTEXT. VARCHAR no puede admitir el almacenamiento de valores tan grandes.
Asegúrese de conocer los efectos de un conjunto de caracteres de múltiples bytes. VARCHAR (255) almacena 255 caracteres, que pueden ser más de 255 bytes.
En este caso, varchar
es mejor.
Tenga en cuenta que varchar
puede ser de 1 a 65535 caracteres.
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. Consulte la Sección E.7.4, "Límites de columna de tabla y límites de tamaño de fila".
Las blobs se guardan en una sección separada del archivo.
Requieren un archivo adicional para incluir en los datos.
Por esta razón, varchar se obtiene mucho más rápido.
Si tiene un blob grande al que accede con poca frecuencia, entonces un blob tiene más sentido.
Almacenar los datos de blobs en un archivo separado (parte del) permite que su archivo de datos centrales sea más pequeño y, por lo tanto, se pueda obtener más rápido.