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.
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.
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 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.
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 :
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. |