Os tipos CHAR
e VARCHAR
são parecidos, mas diferem no modo como são armazenados e
recuperados.
O tamanho de um campo CHAR
é fixado pelo
tamanho declarado na criação da tabela. O tamanho pode ser
qualquer valor entre 1 e 255 (Como na versão 3.23 do MySQL, o
tamanho pode ser de 0 a 255). Quando valores
CHAR
são armazenados, eles são
preenchidos a direita com espaços até o tamanho
especificado. Quando valores CHAR
são
recuperados, espaços extras são removidos.
Valores no campo VARCHAR
são strings de
tamanho variável. Você pode declarar um campo
VARCHAR
para ter qualquer tamanho entre 1 e
255, assim como para campo CHAR
. No
entanto, diferente de CHAR
, valores
VARCHAR
são armazendos usando apenas
quantos caracteres forem necessários, mais 1 byte para gravar
o tamanho. Valores não são preenchidos; ao contrário,
espaços extras são removidos quando valores são
armazenados. (Esta remoção de espaços difere das
especificações do SQL-99). Nenhum caso de conversão é
feito durante um o armazenamento ou recuperação.
Se você atribuir um valor para uma coluna
CHAR
ou VARCHAR
que
exceda o tamanho máximo da coluna, o valor é truncado para
este tamanho.
A seguinte tabela ilustra as diferenças entre os dois tipos
de colunas, mostrando o resultado de se armazenar vários
valores de strings em campos CHAR(4)
e
VARCHAR(4)
:
Valor | CHAR(4) |
Exigência p/ armazenamento | VARCHAR(4) |
Exigência p/ armazenamento |
'' |
' ' |
4 bytes | '' |
1 byte |
'ab' |
'ab ' |
4 bytes | 'ab' |
3 bytes |
'abcd' |
'abcd' |
4 bytes | 'abcd' |
5 bytes |
'abcdefgh' |
'abcd' |
4 bytes | 'abcd' |
5 bytes |
Os valores recuperados para as colunas
CHAR(4)
e VARCHAR(4)
serão os mesmos em cada caso, já que espaços ectras são
removidos das colunas CHAR
quando
recuperados.
Valores nas colunas CHAR
e
VARCHAR
são ordenados e comparadaos no
modo caso-insensitivo, a menos que o atributo
BINARY
seja especificado quando a tabela
for criada. O atributo BINARY
significa que
os valores das colunas são ordenados e comparados no modo
caso-sensitivo de acordo com a ordem ASCII da maquina onde o
servidor MySQL está sesndo executado.
BINARY
não afeta como as colunas são
armazenadas e recuperadas.
A partir da versão 4.1.0, o tipo de coluna CHAR
BYTE
é um alias para CHAR
BINARY
. Thite é um recurso para compatibilidade.
O atributo BINARY
é pegajoso. Isto
significa que se uma coluna definida com
BINARY
é usada na expressão, toda a
expressão é comparada como um valor
BINARY
.
MySQL pode alterar sem aviso o tipo de uma coluna
CHAR
ou VARCHAR
na hora
de criar a tabela. See
Secção 6.5.3.1, “Alteração de Especificações de Colunas”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.