Gostaria de saber qual é o tamanho máximo para um tipo MySQL VARCHAR.
Eu li que o tamanho máximo é limitado pelo tamanho da linha, que é de cerca de 65k. Tentei definir o campo para, varchar(20000)
mas ele diz que é muito grande.
Eu poderia configurá-lo para varchar(10000)
. Qual é o máximo exato que posso definir?
Respostas:
Lembre-se de que o MySQL tem um limite máximo de tamanho de linha
O tamanho máximo que uma única coluna pode ocupar é diferente antes e depois do MySQL 5.0.3
No entanto, observe que o limite é menor se você usar um conjunto de caracteres de bytes múltiplos como utf8 ou utf8mb4.
Use os
TEXT
tipos inorder para superar o limite de tamanho da linha.Mais detalhes sobre os tipos BLOB e TEXT
Ainda mais
Confira mais detalhes sobre os Requisitos de armazenamento de tipo de dados, que tratam dos requisitos de armazenamento para todos os tipos de dados.
fonte
De acordo com os documentos on-line , há um limite de 64 K linhas e você pode determinar o tamanho da linha usando:
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 caractereutf8
(que é autf8
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
ouTEXT
. 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:
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.fonte
utf8mb4
no MySQL .utf8mb4
é o nome do MySql para o que o resto da palavra chama utf8.Fonte
fonte
CHARACTER SET utf8
nos exemplos. Deve serCHARACTER SET utf8mb4
(se você quiser todos texto Unicode para ser armazenado adequadamente ... e quem não quer isso?)CHARSET=utf8mb4
usoVARCHAR(16383)
.Da documentação do MySQL:
Os limites para o VARCHAR variam dependendo do conjunto de caracteres usado. Usar ASCII usaria 1 byte por caractere. Ou seja, você pode armazenar 65.535 caracteres. O uso do utf8 utilizará 3 bytes por caractere, resultando em um limite de 21.844 caracteres. MAS se você estiver usando o moderno multibyte charset utf8mb4 que você deve usar! Ele suporta emojis e outros caracteres especiais. Ele estará usando 4 bytes por caractere. Isso limitará o número de caracteres por tabela para 16.383. Observe que outros campos como INT também serão contados para esses limites.
Conclusão:
utf8 máximo de 21.844 caracteres
utf8mb4 máximo de 16.383 caracteres
fonte
você também pode usar MEDIUMBLOB / LONGBLOB ou MEDIUMTEXT / LONGTEXT
Um tipo de BLOB no MySQL pode armazenar até 65.534 bytes, se você tentar armazenar mais do que esses dados, o MySQL truncará os dados. MEDIUMBLOB pode armazenar até 16.777.213 bytes e LONGBLOB pode armazenar até 4.294.967.292 bytes.
fonte
Antes do Mysql versão 5.0.3, o tipo de dados Varchar pode armazenar 255 caracteres, mas a partir do 5.0.3 ele pode armazenar 65.535 caracteres.
MAS ele tem uma limitação do tamanho máximo de linha de 65.535 bytes. Isso significa que, incluindo todas as colunas, ele não deve ter mais que 65.535 bytes.
No seu caso, pode ser que, quando você esteja tentando definir mais de 10000, exceda mais de 65.535 e o mysql dê o erro.
Para mais informações: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
blog com exemplo: http://goo.gl/Hli6G3
fonte
Você pode usar o
TEXT
tipo , que não está limitado a 64 KB.fonte