Resumo : este tutorial apresenta o VARCHAR
tipo 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 VARCHAR
valor 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 s1
e s2
com 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 s1
coluna 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 sec
Linguagem 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 VARCHAR
coluna, 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 sec
Linguagem de código: JavaScript ( javascript )
MySQL VARCHAR e espaços
O MySQL não preenche espaço quando armazena os VARCHAR
valores. Além disso, o MySQL retém os espaços finais quando insere ou seleciona VARCHAR
valores. 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 )
No entanto, o MySQL truncará os espaços finais ao inserir um VARCHAR
valor 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 title
coluna. 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 )
Neste tutorial, você aprendeu como usar VARCHAR
o tipo de dados MySQL para armazenar strings variáveis no banco de dados.