Según los documentos en línea , hay un límite de filas de 64K y puede calcular el tamaño de la fila usando:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Debe tener en cuenta que las longitudes de columna no son un mapeo individual de su tamaño. Por ejemplo, CHAR(10) CHARACTER SET utf8
requiere tres bytes para cada uno de los diez caracteres, ya que esa codificación particular debe tener en cuenta la propiedad de tres bytes por carácter de utf8
(esa es la utf8
codificación de MySQL en lugar de UTF-8 "real", que puede tener hasta cuatro bytes )
Pero, si el tamaño de su fila se acerca a 64 K, es posible que desee examinar el esquema de su base de datos. Es una tabla rara que debe ser tan amplia en una base de datos configurada correctamente (3NF); es posible, pero no muy común.
Si desea usar más que eso, puede usar los tipos BLOB
o TEXT
. Estos no cuentan contra el límite de 64K de la fila (que no sea una pequeña huella administrativa), pero debe ser consciente de otros problemas que surgen de su uso, como no poder ordenar usando todo el bloque de texto más allá de un cierto número de caracteres (aunque esto se puede configurar hacia arriba), lo que obliga a las tablas temporales a estar en el disco en lugar de en la memoria, o tener que configurar los búferes de comunicaciones del cliente y el 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 tiene la falta de coincidencia de bytes / caracteres (de modo que una MEDIUMTEXT utf8
columna puede almacenar "solo" aproximadamente medio millón de caracteres (16M-1)/3 = 5,592,405
) , pero aún así amplía enormemente su rango.