Os Tipos CHAR
e VARCHAR
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 MariaDB, 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 MariaDB 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. Leia "Alteração de Especificações de Colunas".