mediumblob length mysql database datafield

length - text on mysql



VARCHAR vs TEXT en MySQL (3)

Tengo dos campos: uno para almacenar un excerpt con un tamaño máximo de 500 caracteres y otro para almacenar una description con un tamaño máximo de 10.000 caracteres.

¿Qué tipos de datos debo usar, TEXT o VARCHAR ? ¿Y por qué?

Después de que MySQL 5.0.3 VARCHAR acepta ~ 65000 caracteres. Pero esto no dice por qué debería usar un tipo y / o el otro.

Estoy razonando que debo usar VARCHAR para el extracto porque puedo asignar un límite de tamaño y TEXT para el campo de description , ya que es más grande.


Si su contenido encaja en una columna varchar, entonces use varchar.

Los datos varchar se almacenan en cada fila. Los datos de texto se almacenan como manchas fuera de la tabla.

Según esta prueba , varchar es aproximadamente tres veces más rápido que el texto.


Un VARCHAR largo se almacena de la misma manera que un campo TEXT / BLOB en InnoDB (que supongo que está usando para la transaccionalidad, la integridad referencial y la recuperación de fallos, ¿no?), Es decir, externamente al resto de la tabla en el disco (lo que puede requerir otra lectura de disco para recuperar).

Desde el posible BLOB de almacenamiento, tanto TEXT como el VARCHAR largo se manejan de la misma manera por Innodb. Esta es la razón por la que el manual de Innodb lo llama “columnas largas” en lugar de BLOB.

source

A menos que necesite indexar estas columnas (en cuyo caso VARCHAR es mucho más rápido), no hay razón para usar VARCHAR sobre TEXT para campos largos: hay algunas optimizaciones específicas del motor en MySQL para ajustar la recuperación de datos según la longitud, y debe usar El tipo de columna correcto para aprovechar estos.

En caso de que esté utilizando MyISAM una discusión en profundidad sobre el tema.


Una diferencia entre VARCHAR y TEXT es que puede declarar una cláusula DEFAULT para una columna VARCHAR , pero no para una columna TEXT .

@Andy tiene razón en que InnoDB almacena tanto VARCHAR como TEXT de la misma manera internamente.

FULLTEXT índices FULLTEXT son compatibles con VARCHAR y TEXT . Antes de la versión 5.6, debe usar MyISAM para obtener ese tipo de índice. En MySQL 5.6, finalmente soporta FULLTEXT en InnoDB. Aunque debe probarlo con cuidado, ya que parece devolver resultados diferentes a la implementación en MyISAM.

Sin embargo, Sphinx Search es más rápido y más rico en funciones que cualquiera de las implementaciones en MySQL. Ver mi resumen en la búsqueda de texto completo Throwdown .

@Mohammed preguntó:

¿Cuándo VARCHAR se considera LONG VARCHAR ? ¿Hay un umbral de caracteres?

Si declara una longitud de hasta 255 bytes, puede codificar la longitud de una cadena dada usando un byte. Si declara la longitud máxima de la columna de más de 255 bytes, utilizará dos bytes para codificar la longitud.

Puede declarar una columna como LONG VARCHAR , pero esto es solo un alias para MEDIUMTEXT .

mysql> create table test ( l long varchar); mysql> show create table test/G CREATE TABLE `test` ( `l` mediumtext ) ENGINE=InnoDB DEFAULT CHARSET=latin1