323 votos

¿Cuál es el tamaño máximo de MySQL VARCHAR?

Me gustaría saber cuál es el tamaño máximo para un tipo de VARCHAR de MySQL.

Leí que el tamaño máximo está limitado por el tamaño de la fila que es de unos 65k. Intenté configurar el campo a varchar(20000) pero dice que es demasiado grande.

Podría ponerlo a varchar(10000) . ¿Cuál es el máximo exacto que puedo establecer?

1 votos

Un blog de detalles: goo.gl/Hli6G3

314voto

rajukoyilandy Puntos 1352

Los valores en las columnas de VARCHAR son cadenas de longitud variable. La longitud puede ser especificada 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 posteriores está sujeta al tamaño máximo de la fila (65.535 bytes, que se comparte entre todas las columnas) y al juego de caracteres utilizado.

Utilice TEXT tipos.

Los cuatro tipos de TEXTO son TINTEXTO, TEXTO, MEDIOTEXTO y LARGOTEXTO. Estos corresponden a los cuatro tipos BLOB y tienen las mismas longitudes máximas y requisitos de almacenamiento.

Ver Los tipos de BLOB y TEXTO

5 votos

¿qué es una cadena "larga"?

9 votos

Sin embargo, trato de evitar las columnas de TEXTO, ya que pueden causar la creación de tablas temporales cuando están presentes y la clasificación

1 votos

Si tomo varchar(200) para el nombre y almaceno sólo 6 caracteres en este campo, ¿cuántos bytes ocupará el nombre?

62voto

paxdiablo Puntos 341644

Según los documentos en línea hay un límite de 64K de filas y puedes calcular el tamaño de las filas usando:

row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)

Hay que tener en cuenta que la longitud de las columnas no es un mapa de su tamaño. Por ejemplo, CHAR(10) CHARACTER SET utf8 requiere tres bytes por cada uno de los diez caracteres, ya que esa codificación particular tiene que tener en cuenta la propiedad de tres bytes por carácter de utf8 .

Pero, si el tamaño de su fila se acerca a 64K, puede que quiera examinar el esquema de su base de datos. Es una tabla rara que necesita ser tan amplia en una base de datos correctamente configurada (3NF) - es posible, pero no es muy común.

Si quieres usar más que eso, puedes usar el BLOB o TEXT tipos. Estos no cuentan para el límite de 64K de la fila (aparte de una pequeña huella administrativa) pero hay que tener en cuenta otros problemas que se derivan de su uso, como no poder clasificar utilizando todo el bloque de texto más allá de un cierto número de caracteres (aunque esto puede configurarse hacia arriba), obligar a que las tablas temporales estén en el disco en lugar de en la memoria, o tener que configurar los búferes de comunicaciones del cliente y del servidor para manejar los tamaños de manera eficiente.

Los tamaños permitidos son:

TINYTEXT          255 (+1 byte  overhead)
TEXT          64K - 1 (+2 bytes overhead)
MEDIUMTEXT    16M - 1 (+3 bytes overhead)
LONGTEXT      4G  - 1 (+4 bytes overhead)

Todavía tienes el desajuste de bytes/caracteres (de modo que un MEDIUMTEXT utf8 puede almacenar "sólo" alrededor de medio millón de caracteres, (16M-1)/3 = 5,592,405 ) pero aún así expande enormemente su alcance.

4 votos

Tenga en cuenta que los tipos TEXT NO pueden almacenarse en tablas de memoria, por lo que existe una importante penalización de rendimiento por utilizarlos cuando un VARCHAR sería suficiente.

0 votos

'la propiedad de tres bytes por carácter de utf8' de MySql utf8 , que en realidad no es utf8 en absoluto. En realidad el máximo de bytes en un char utf-8 es 4 . Por esta razón, siempre debe establecer la codificación en utf8mb4 en MySQL . utf8mb4 es el nombre de MySql para lo que el resto del mundo llama utf8.

1 votos

@StijndeWitt, gracias por eso. Aclarado para indicar que me refería al método de codificación utf8 de MySQL en lugar de UTF-8. Generalmente uso la variante en mayúsculas para indicar UTF-8 "real" ya que es la convención IANA aceptada.

42voto

Attila Bujáki Puntos 1221

Fuente

"La longitud máxima de un varchar está sujeta al tamaño máximo de la fila en MySQL, que es de 64KB (sin contar los BLOBs):

VARCHAR(65535) Sin embargo, tenga en cuenta que el límite es menor si utiliza un conjunto de caracteres de varios bytes:

VARCHAR(21844) JUEGO DE CARACTERES utf8"

24 votos

Por favor, deje de usar CHARACTER SET utf8 en los ejemplos. Debe ser CHARACTER SET utf8mb4 (si quieres todo texto Unicode para que se almacene correctamente... ¿y quién no quiere eso?)

4 votos

Para CHARSET=utf8mb4 utilice VARCHAR(16383) .

3 votos

El uso de utf8mb4 le hará enfrentarse al límite de la anchura del índice en una situación en la que utf8 no lo hace. Si examina los conjuntos de caracteres que se incluyen en utf8mb4 pero no en utf8, puede encontrar que incluir todas las diversas formas de jeroglíficos y otros conjuntos de caracteres arcanos no vale la pena la significativa penalización de rendimiento (determinada empíricamente). No es tan fácil como dice Stijn.

6voto

SRIRAM Puntos 955

también puedes usar MEDIUMBLOB/LONGBLOB o MEDIUMTEXT/LONGTEXT

Un tipo de BLOB en MySQL puede almacenar hasta 65.534 bytes, si intenta almacenar más de esta cantidad de datos MySQL truncará los datos. MEDIUMBLOB puede almacenar hasta 16.777.213 bytes, y LONGBLOB puede almacenar hasta 4.294.967.292 bytes.

-6voto

mvp Puntos 29360

Puedes usar TEXT escriba que no se limita a 64KB.

33 votos

Esto no responde a la pregunta.

1 votos

Su respuesta no es pertinente a la pregunta.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X