Según la documentación en línea, hay un límite de 64K filas y puedes calcular el tamaño de la fila usando:
longitud de fila = 1
+ (suma de longitudes de columnas)
+ (número de columnas NULL + delete_flag + 7)/8
+ (número de columnas de longitud variable)
Debes tener en cuenta que las longitudes de las columnas no se corresponden directamente con su tamaño. Por ejemplo, CHAR(10) CHARACTER SET utf8
requiere tres bytes para cada uno de los diez caracteres, ya que ese codificación particular debe tener en cuenta la propiedad de tres bytes por carácter de utf8
(ese es el cifrado utf8
de MySQL en lugar de "verdadero" UTF-8, que puede tener hasta cuatro bytes).
Pero, si el tamaño de tu fila se acerca a los 64K, es posible que desees examinar el esquema de tu base de datos. Es raro que una tabla necesite ser tan ancha en una base de datos bien configurada (3NF) - es posible, solo que no muy común.
Si deseas utilizar más que eso, puedes usar los tipos BLOB
o TEXT
. Estos no cuentan para el límite de 64K de la fila (más allá de una pequeña huella administrativa) pero debes ser consciente de otros problemas que surgen de su uso, como no poder ordenar usando todo el bloque de texto más allá de cierto número de caracteres (aunque esto se puede configurar para incrementar), forzando que las tablas temporales estén en disco en lugar de en memoria, o tener que configurar los búferes de comunicación entre cliente y servidor para manejar eficientemente los tamaños.
Los tamaños permitidos son:
TINYTEXT 255 (+1 byte de sobrecarga)
TEXT 64K - 1 (+2 bytes de sobrecarga)
MEDIUMTEXT 16M - 1 (+3 bytes de sobrecarga)
LONGTEXT 4G - 1 (+4 bytes de sobrecarga)
Aún tienes la discrepancia de byte/caracter (por lo que una columna MEDIUMTEXT utf8
puede almacenar "solo" alrededor de medio millón de caracteres, (16M-1)/3 = 5,592,405
) pero aún amplía en gran medida tu rango.
1 votos
Un blog detallado: goo.gl/Hli6G3