usar entre diferencia mysql

usar - Diferencia entre VARCHAR y TEXT en mysql



varchar o text en sql (1)

TL; DR

TEXT

  • tamaño máximo fijo de 65535 caracteres (no se puede limitar el tamaño máximo)
  • toma 2 + c bytes de espacio en disco, donde c es la longitud de la cadena almacenada.
  • no puede ser parte de un índice

VARCHAR(M)

  • tamaño máximo variable de M caracteres
  • M debe estar entre 1 y 65535
  • toma 1 + c bytes (para M ≤ 255) o 2 + c (para 256 ≤ M ≤ 65535) bytes de espacio en disco donde c es la longitud de la cadena almacenada
  • puede ser parte de un índice

Más detalles

TEXT tiene un tamaño máximo fijo de 2¹⁶-1 = 65535 caracteres.
VARCHAR tiene un tamaño máximo variable M hasta M = 2¹⁶-1 .
Por lo tanto, no puede elegir el tamaño de TEXT pero puede hacerlo para un VARCHAR .

La otra diferencia es que no puede poner un índice (excepto un índice de texto completo) en una columna de TEXT .
Entonces, si desea tener un índice en la columna, debe usar VARCHAR . Pero tenga en cuenta que la longitud de un índice también es limitada, por lo que si su columna VARCHAR es demasiado larga, debe usar solo los primeros caracteres de la columna VARCHAR de su índice (Consulte la documentación de CREATE INDEX ).

Pero también quiere usar VARCHAR , si sabe que la longitud máxima de la cadena de entrada posible es solo M , por ejemplo, un número de teléfono o un nombre o algo como esto. Luego puede usar VARCHAR(30) lugar de TINYTEXT o TEXT y si alguien intenta guardar el texto de los tres libros de "El señor del anillo" en su columna de número de teléfono, solo almacena los primeros 30 caracteres :)

Editar: si el texto que desea almacenar en la base de datos tiene más de 65535 caracteres, debe elegir MEDIUMTEXT o LONGTEXT , pero tenga cuidado: MEDIUMTEXT almacena cadenas de hasta 16 MB, LONGTEXT hasta 4 GB. Si usa LONGTEXT y obtiene los datos a través de PHP (al menos si usa mysqli sin store_result ), tal vez obtenga un error de asignación de memoria, porque PHP intenta asignar 4 GB de memoria para asegurarse de que toda la cadena se pueda almacenar. Esto tal vez también suceda en otros idiomas aparte de PHP.

Sin embargo, siempre debe verificar la entrada (¿Es demasiado larga? ¿Contiene un código extraño?) Antes de almacenarla en la base de datos.

Aviso: para ambos tipos, el espacio de disco requerido depende solo de la longitud de la cadena almacenada y no de la longitud máxima.
Por ejemplo, si usa el juego de caracteres latin1 y almacena el texto "Prueba" en VARCHAR(30) , VARCHAR(100) y TINYTEXT , siempre requiere 5 bytes (1 byte para almacenar la longitud de la cadena y 1 byte para cada carácter). Si almacena el mismo texto en una VARCHAR(2000) o TEXT , también requerirá el mismo espacio, pero, en este caso, sería de 6 bytes (2 bytes para almacenar la longitud de cadena y 1 byte para cada carácter )

Para obtener más información, eche un vistazo a la documentation .

Finalmente, quiero agregar un aviso, que tanto TEXT como VARCHAR son tipos de datos de longitud variable, por lo que lo más probable es que minimicen el espacio que necesita para almacenar los datos. Pero esto viene con una compensación por el rendimiento. Si necesita un mejor rendimiento, debe usar un tipo de longitud fija como CHAR . Puedes leer más sobre esto here .

Cuando creamos una tabla en mysql con una columna VARCHAR , debemos establecer su longitud. Pero para el tipo de TEXT no tenemos que proporcionar la longitud.

¿Cuáles son las diferencias entre VARCHAR y TEXT ?