De acordo com os documentos on-line , há um limite de 64 K linhas e você pode determinar o tamanho da linha usando:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Você deve ter em mente que os comprimentos das colunas não são um mapeamento individual do tamanho. Por exemplo, CHAR(10) CHARACTER SET utf8
requer três bytes para cada um dos dez caracteres, pois essa codificação específica deve ser responsável pela propriedade de três bytes por caractere utf8
(que é a utf8
codificação do MySQL em vez de UTF-8 "real", que pode ter até quatro bytes )
Mas, se o tamanho da sua linha chegar aos 64K, convém examinar o esquema do seu banco de dados. É uma tabela rara que precisa ser tão ampla em um banco de dados configurado corretamente (3NF) - é possível, mas não muito comum.
Se você quiser usar mais do que isso, use os tipos BLOB
ou TEXT
. Eles não são contabilizados no limite de 64K da linha (exceto uma pequena área administrativa), mas você precisa estar ciente de outros problemas resultantes do uso deles, como não conseguir classificar usando o bloco de texto inteiro além de um determinado número de caracteres (embora isso possa ser configurado para cima), forçando tabelas temporárias a estar no disco, e não na memória, ou tendo que configurar buffers de comunicação do cliente e do servidor para lidar com os tamanhos com eficiência.
Os tamanhos permitidos são:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
Você ainda tem a incompatibilidade de bytes / caracteres (para que uma MEDIUMTEXT utf8
coluna possa armazenar "apenas" cerca de meio milhão de caracteres (16M-1)/3 = 5,592,405
) , mas ainda assim expande consideravelmente seu alcance.