Pergunta

Se eu tiver uma coluna na tabela com campo do tipo VARCHAR(15) e se eu tentar inserir dados de comprimento 16, o MySQL dá um erro informando

Data too long for column 'testname' at row 1

Alguém sabe por que os campos VARCHAR no MySQL têm comprimento fixo?Além disso, quantos bytes um campo VARCHAR ocupa por registro com base no tamanho fornecido?

Foi útil?

Solução

Se você definir uma coluna como varchar(15) Os bytes máximos permitidos é 15. Assim, você não pode passar mais de 15 caracteres sem modificar a coluna para suportar mais de 15. Se você armazenar uma corda de 4 caracteres, ela deve usar apenas cerca de 4 bytes de um possível 15, enquanto se se você costumava char(15) Teria preenchido os outros 11 com bytes vazios.

http://dev.mysql.com/doc/refman/5.0/en/char.html

(Meu cálculo de bytes provavelmente foi desativado, pois é sempre -1/+1 ou algo assim).

Outras dicas

De Manual MySQL 5.0:

Os valores nas colunas varchar são seqüências de comprimento de variável. O comprimento pode ser especificado como um valor de 0 a 255 antes do MySQL 5.0.3 e 0 a 65.535 em 5.0.3 e versões posteriores. O comprimento máximo efetivo de um varchar no MySQL 5.0.3 e posterior está sujeito ao tamanho máximo da linha (65.535 bytes, que são compartilhados entre todas as colunas) e o conjunto de caracteres usado.

Eu só uso Varchar quando estou certo que os dados que a coluna precisa manter nunca excederão um certo comprimento e, mesmo assim, eu sou cauteloso. Se eu estiver armazenando uma string de texto, tendem a usar um dos tipos de texto.

Confira o Requisitos de armazenamento do MySQL Para obter mais informações sobre como os bytes são usados.

Pequena nota local extra. O número de bytes utilizados dependerá do esquema de codificação em uso. 1 byte por caractere na codificação Latin1, mas até 3 no UTF8. Veja o link na resposta de Mlambie para obter detalhes.

Se você olhar aqui, deverá contar tudo sobre varchar que você deseja saber:http://dev.mysql.com/doc/refman/5.0/en/char.html

Basicamente, dependendo do comprimento que você escolher, ele usará 1 ou dois bytes para rastrear o comprimento da string atual naquela coluna, armazenando o número de bytes dos dados inseridos, mais um ou dois bytes.

Portanto, se você inserir 'abc', serão 4 ou 5 bytes usados ​​para aquela coluna naquela linha.

Se você usou char(15) então, mesmo 'abc' ocuparia 15 bytes, já que os dados são preenchidos à direita para usar os 15 bytes completos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top