Tipo de dados MySQL VARCHAR

Resumo : este tutorial apresenta o VARCHARtipo de dados MySQL e discute alguns recursos importantes do VARCHAR.

Introdução ao tipo de dados MySQL VARCHAR

MySQL VARCHARé a string de comprimento variável cujo comprimento pode ser de até 65.535. O MySQL armazena um VARCHARvalor como um prefixo de 1 ou 2 bytes mais os dados reais.

O prefixo de comprimento especifica o número de bytes no valor. Se uma coluna exigir menos de 255 bytes, o prefixo de comprimento será 1 byte. Caso a coluna exija mais de 255 bytes, o prefixo de comprimento é de dois bytes de comprimento.

O comprimento máximo, entretanto, está sujeito ao tamanho máximo da linha (65.535 bytes) e ao conjunto de caracteres usado. Isso significa que o comprimento total de todas as colunas deve ser inferior a 65.535 bytes.

Vejamos um exemplo.

Criaremos uma nova tabela que possui duas colunas s1e s2com comprimento de 32765(+2 para prefixo de comprimento) e 32766 (+2). Observe que 32765+2+32766+2=65535, que é o tamanho máximo da linha.

CREATE TABLE IF NOT EXISTS varchar_test (
    s1 VARCHAR(32765) NOT NULL,
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução criou a tabela com sucesso. No entanto, se aumentarmos o comprimento da s1coluna em 1.

CREATE TABLE IF NOT EXISTS varchar_test_2 (
    s1 VARCHAR(32766) NOT NULL, -- error
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

MySQL emitirá a mensagem de erro:

Error Code: 1118. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs 0.000 secLinguagem de código:  JavaScript  ( javascript )

Como você pode ver, o tamanho da linha é muito grande e a instrução falhou.

Se você inserir uma string cujo comprimento seja maior que o comprimento de uma VARCHARcoluna, o MySQL emitirá um erro. Considere o seguinte exemplo:

CREATE TABLE items (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(3)
);

INSERT INTO items(title)
VALUES('ABCD');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, o MySQL emitiu a seguinte mensagem de erro:

Error Code: 1406. Data too long for column 'title' at row 1 0.000 secLinguagem de código:  JavaScript  ( javascript )

MySQL VARCHAR e espaços

O MySQL não preenche espaço quando armazena os VARCHARvalores. Além disso, o MySQL retém os espaços finais quando insere ou seleciona VARCHARvalores. Veja o exemplo a seguir:

INSERT INTO items(title)
VALUES('AB ');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
SELECT 
    id, title, length(title)
FROM
    items;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL VARCHAR com exemplo de espaço à direita

No entanto, o MySQL truncará os espaços finais ao inserir um VARCHARvalor que contém espaços finais que fazem com que o comprimento da coluna seja excedido. Além disso, o MySQL emite um aviso. Vejamos o seguinte exemplo:

INSERT INTO items(title)
VALUES('ABC ');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Esta instrução insere uma string cujo comprimento é 4 na titlecoluna. O MySQL ainda insere a string, porém trunca o espaço final antes de inserir o valor.

1 row(s) affected, 1 warning(s): 1265 Data truncated for column 'title' at row 1
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Você pode verificar isso usando a seguinte consulta:

SELECT 
    title, LENGTH(title)
FROM
    items;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo MySQL VARCHAR

Neste tutorial, você aprendeu como usar VARCHARo tipo de dados MySQL para armazenar strings variáveis ​​no banco de dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *