logo

MySQL VARCHAR

Varchar no MySQL é um tipo de dados usado para armazenar texto cujo comprimento pode ter no máximo 65535 caracteres . As colunas varchar na tabela são de string de comprimento variável que pode conter números, caracteres ou ambos. Este tipo de dados é capaz de armazenar apenas 255 caracteres antes da versão 5.0.3, mas com esta versão e posteriores, pode conter até 65.535 caracteres. Ele pode ser armazenado no MySQL como um 1 byte ou 2 bytes prefixo de comprimento mais tamanho real.

O prefixo de comprimento especifica o comprimento em bytes de um valor de string, não o tamanho máximo que definimos. Se os valores não exigirem mais de 255 bytes, uma coluna usará o prefixo de comprimento mais um byte. Se os valores exigirem mais de 255 bytes, uma coluna usará o prefixo de comprimento mais dois bytes.

hash na estrutura de dados

O comprimento máximo de um VARCHAR em MySQL está sujeito ao tamanho máximo de linha de 65.535 bytes, que é compartilhado entre todas as colunas, exceto as colunas TEXT/BLOB e o conjunto de caracteres usado. Isso significa que a coluna total não deve ter mais que 65.535 bytes.

Vamos entendê-lo com a ajuda de um exemplo.

Vamos criar duas tabelas e nomeá-las como Teste1 e Teste2. Ambas as tabelas contêm duas colunas denominadas T1 e T2. Execute a seguinte instrução para criar uma tabela ' Teste 1 ':

 CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

A instrução acima criou uma tabela com sucesso porque o comprimento da coluna T1 = 32765 mais 2 bytes e T2 = 32766 mais 2 bytes é igual a 65535 (32765+2+32766+2). Portanto, o comprimento da coluna satisfaz o tamanho máximo da linha de varchar, que é 65535.

MySQL VARCHAR

Agora veremos o que acontece se o tamanho da coluna excede o tamanho máximo de varchar 65535. Execute a instrução abaixo onde aumentamos o tamanho da coluna T1 para criar uma tabela Teste2 :

 CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

Após executar a instrução acima, o MySQL produz o erro. Isso significa que o tamanho máximo da linha não pode exceder 65.535 bytes. De qualquer forma, se aumentar, a instrução falhou e o MySQL irá gerar um erro.

MySQL VARCHAR

Em outro caso, suponha que criamos uma tabela chamada Teste3 usando a declaração abaixo:

 CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL ); 

A seguir, insira valores na tabela usando a instrução abaixo:

 INSERT INTO Test3(Name) VALUES ('Stephen'); 

Agora, execute a instrução acima. MySQL dá a mensagem de erro: Os dados são muito longos para a coluna 'Nome' na linha 1 . A saída explica isso mais claramente.

MySQL VARCHAR

MySQL VARCHAR e espaços

O MySQL não preenche espaço para valores varchar quando eles são armazenados. O MySQL também manteve os espaços finais quando armazenou ou recuperou valores varchar. Podemos entendê-lo através do exemplo a seguir, onde um inserir instrução adiciona valores no Nome coluna da tabela Teste3 :

 INSERT INTO Test3(Name) VALUES ('John '); 

Em seguida, execute a instrução SELECT para recuperar os valores.

 SELECT Id, Name, length(Name) FROM Test3; 

Ele fornecerá a seguinte saída onde o MySQL incluiu o espaço final na contagem do comprimento porque não aumenta o comprimento da coluna.

MySQL VARCHAR

Entretanto, quando tentamos inserir um valor varchar com espaços à direita que excedam o comprimento da coluna, o MySQL irá truncar os espaços finais. Além disso, o MySQL emite um aviso . O exemplo a seguir explica isso mais claramente:

 INSERT INTO Test3(Name) VALUES ('Peter '); 

A instrução acima insere um valor cujo comprimento é seis na coluna do nome. O valor ainda é inserido na coluna, mas o MySQL trunca o espaço final antes de adicionar o valor. Podemos verificar usando a consulta abaixo onde podemos ver a instrução insert adicionada com sucesso, mas com um aviso que fornece: Dados truncados para a coluna 'nome' na linha 1 :

MySQL VARCHAR

Diferença entre os tipos de dados Char e Varchar

Os tipos de dados char e varchar são os seguintes Caractere ASCII . Eles são quase iguais, mas diferem no armazenamento e recuperação dos dados do banco de dados. A tabela a seguir resume as diferenças essenciais entre os tipos de dados char e varchar:

CARACTERES VARCHAR
É de caráter. Significa caractere variável.
Ele armazena os valores em comprimento fixo que declaramos ao criar uma tabela. Ele armazena os valores em uma string de comprimento variável com prefixo de comprimento de um ou dois bytes.
Este tipo de dados pode ser preenchido com espaço à direita para manter o comprimento especificado. Este tipo de dados não pode ser preenchido com nenhum caractere, incluindo espaço, quando são armazenados.
Não pode conter mais de 255 caracteres. Pode conter até 65.535 caracteres.
Suporta alocação de memória estática. Suporta alocação dinâmica de memória.