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.

