Problema com tamanho máximo de linha no MySQL

7

Eu tenho um problema com o MySQL, eu tenho uma tabela com muitos campos de texto. Quando tento armazenar alguns dados, obtenho este erro.

Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs

O texto que eu armazeno em cada campo não é muito longo, apenas alguns parágrafos em cada um.

O que posso fazer?

    
por Memochipan 01.11.2011 / 23:07

4 respostas

9

Obrigado pelas pessoas que respondem. Os links que você postou eram uma base muito útil para começar a aprender.

Finalmente encontrei esta página: link

E eu configurei my.cnf adicionando essas duas linhas na seção [mysqld] :

innodb_file_per_table
innodb_file_format = Barracuda

Então eu ALTER minha tabela com este comando através do phpMyAdmin:

ALTER TABLE nombre_tabla
 ENGINE=InnoDB
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=8; 
 SHOW WARNINGS;

Também é possível usar outras configurações que você pode ler no link acima, mas elas funcionaram bem para mim.

    
por 02.11.2011 / 23:16
3

Você pode dar uma olhada em este artigo , que explica muito sobre tamanhos de linha do MySQL. É importante observar que, mesmo se você usar campos TEXT ou BLOB, o tamanho da sua linha ainda pode ter mais de 8K (limite para InnoDB), pois armazena os primeiros 768 bytes para cada campo em linha na página. A maneira mais simples de corrigir isso é usar o formato de arquivo Barracuda com o InnoDB. Isso basicamente se livra do problema ao armazenar apenas o ponteiro de 20 bytes nos dados de texto, em vez de armazenar os primeiros 768 bytes.

    
por 02.11.2011 / 01:18
1

Bem, faça como o mysql diz: converta campos grandes de varchar para texto ou blob (ALTER TABLE). campos de texto se comportam muito como varchar (os índices precisam de comprimento de prefixo, mas ainda assim funcionam), mas são armazenados separadamente.

Esta referência indica os limites exatos de todos os mecanismos de tabela mysql:

link

E aqui está tudo para saber sobre os campos de texto:

link

    
por 02.11.2011 / 00:59
0

Principalmente a postagem cruzada do estouro de pilha , mas isso é um bug aberto (e verificado) no mecanismo InnoDB do servidor MySQL . Uma correção temporária para agora é recorrer ao mecanismo MyISAM como armazenamento temporário. Então, no seu arquivo my.cnf:

internal_tmp_disk_storage_engine=MyISAM
    
por 01.10.2017 / 16:47

Tags