MySQL: ¿VARCHAR grande frente a TEXTO?

Resuelto Tom asked hace 14 años • 9 respuestas

Tengo una tabla de mensajes en MySQL que registra mensajes entre usuarios. Aparte de los identificadores y tipos de mensajes típicos (todos los tipos enteros), necesito guardar el texto del mensaje real como VARCHAR o TEXTO. Estoy estableciendo un límite de interfaz de usuario de 3000 caracteres, lo que significa que los mensajes nunca se insertarán en la base de datos por más tiempo que esto.

¿Existe alguna razón para utilizar VARCHAR(3000) o TEXT? Hay algo en simplemente escribir VARCHAR(3000) que parece algo contrario a la intuición. He leído otras publicaciones similares en Stack Overflow, pero sería bueno obtener vistas específicas de este tipo de almacenamiento de mensajes común.

Tom avatar Jan 08 '10 03:01 Tom
Aceptado
  • TEXTy BLOB puede almacenarse fuera de la tabla; la tabla solo tiene un puntero a la ubicación del almacenamiento real. El lugar donde se almacena depende de muchas cosas, como el tamaño de los datos, el tamaño de las columnas, el formato de fila y la versión de MySQL.

  • VARCHARse almacena en línea con la tabla. VARCHARes más rápido cuando el tamaño es razonable, la compensación de cuál sería más rápido depende de sus datos y su hardware, querrá comparar un escenario del mundo real con sus datos.

MindStalker avatar Jan 07 '2010 20:01 MindStalker

¿Puedes predecir cuánto durará la entrada del usuario?

VARCHAR(X)

Longitud máxima: variable, hasta 65 535 bytes (64 KB)
Caso: nombre de usuario, correo electrónico, país, asunto, contraseña


TEXTO

Longitud máxima: 65.535 bytes (64 KB)
Caso: mensajes, correos electrónicos, comentarios, texto formateado, html, código, imágenes, enlaces


TEXTO MEDIO

Longitud máxima: 16.777.215 bytes (16 MB)
Caja: cuerpos json grandes, libros de longitud corta a mediana, cadenas csv


TEXTO LARGO

Longitud máxima: 4.294.967,29 bytes (4 GB)
Caso: libros de texto, programas, años de archivos de registros, harry potter y el cáliz de fuego, registros de investigaciones científicas

Hay más información sobre esta pregunta .

Michael J. Calkins avatar Nov 01 '2012 17:11 Michael J. Calkins

Sólo para aclarar las mejores prácticas:

  1. Los mensajes en formato de texto casi siempre deben almacenarse como TEXTO (terminan siendo arbitrariamente largos)

  2. Los atributos de cadena deben almacenarse como VARCHAR (el nombre de usuario de destino, el asunto, etc...).

Entiendo que tienes un límite inicial, lo cual es genial hasta que deja de serlo. *sonrisa* El truco consiste en pensar en la base de datos como algo separado de las aplicaciones que se conectan a ella. El hecho de que una aplicación ponga un límite a los datos no significa que los datos estén intrínsecamente limitados.

¿Qué tienen los mensajes en sí que los obliga a no tener nunca más de 3000 caracteres? Si es solo una restricción de aplicación arbitraria (por ejemplo, para un cuadro de texto o algo así), use un TEXTcampo en la capa de datos.

James avatar Jan 07 '2010 21:01 James