No banco de dados MySQL versão 8.2, em sua configuração original, os tipos de dadose são usados para armazenar caracteres, mas eles se comportam de maneiras diferentes em termos de armazenamento e de desempenho. O primeiro é um tipo de dado de comprimento fixo. Nesse caso, se o valor armazenado em um campo com esse tipo de dado for menor que o tamanho definido, o MySQL irá preencher o valor com espaços em branco até atingir o comprimento especificado. O segundo, por sua vez, é um tipo de dado de comprimento variável, que requer a especificação de um comprimento máximo, mas que pode armazenar strings que são menores que o comprimento máximo definido. Assim, se o tipo de dado for definido com tamanho máximo de até 10 caracteres, mas for inserido um registro com uma string de 5 caracteres, ela ocupará apenas 5 caracteres de espaço (mais um ou dois bytes adicionais para registrar o comprimento da string).
Assinale a alternativa que preenche, correta e respectivamente, as lacunas do enunciado.
AVARCHAR ... TEXT
BCHAR ... VARCHAR
CTEXT ... CHAR
DBIGINT ... TEXT
ECHAR ... DOUBLE
Revelar gabarito e comentário▾
GabaritoB — CHAR ... VARCHAR
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Tipos de dados de caracteres no MySQL: CHAR × VARCHAR
Gabarito: letra B. O enunciado descreve, na primeira lacuna, um tipo de comprimento fixo que preenche com espaços em branco até o tamanho definido — exatamente o CHAR — e, na segunda, um tipo de comprimento variável que armazena apenas o conteúdo inserido (mais bytes de controle) — exatamente o VARCHAR. A alternativa B é a única que preenche correta e respectivamente as lacunas.
O MySQL oferece diversos tipos de dados para armazenar strings, e a distinção entre CHAR e VARCHAR é uma das mais cobradas em provas de banco de dados. Ambos armazenam caracteres, mas diferem fundamentalmente na forma como o espaço é alocado e, consequentemente, no desempenho de leitura e escrita.
O CHAR(n) é um tipo de comprimento fixo: ao declarar uma coluna como CHAR(10), o MySQL reserva exatamente 10 caracteres de espaço para cada registro, independentemente do conteúdo. Se você inserir a string 'abc', ela ocupará os 10 caracteres — os 3 da string e 7 espaços em branco à direita (padding). Isso torna o CHAR mais rápido para leituras, pois o acesso é direto, sem necessidade de interpretar um prefixo de comprimento. Por outro lado, desperdiça espaço quando os valores são menores que o tamanho definido.
O VARCHAR(n), por sua vez, é um tipo de comprimento variável: ele armazena apenas os caracteres efetivamente inseridos, acrescidos de 1 ou 2 bytes adicionais para registrar o comprimento da string. Assim, uma coluna VARCHAR(10) com o valor 'abc' ocupará apenas 3 caracteres + 1 byte de controle (para strings de até 255 caracteres) ou 2 bytes (para strings maiores). Isso economiza espaço, mas exige um processamento extra para ler o prefixo de comprimento, tornando as operações ligeiramente mais lentas que o CHAR.
A escolha entre CHAR e VARCHAR depende do cenário: para valores de comprimento constante (como códigos de país, UF, CPF), o CHAR é mais eficiente; para valores de comprimento variável (como nomes, endereços, descrições), o VARCHAR é mais adequado. O MySQL também remove os espaços à direita ao recuperar valores CHAR, o que pode gerar confusão se o dado original continha espaços significativos.
A pegadinha da banca está em inverter os conceitos: muitos candidatos confundem CHAR com variável e VARCHAR com fixo, ou trocam por TEXT, que é um tipo para strings longas (até 65.535 bytes) sem tamanho máximo declarado na definição da coluna. O TEXT não se encaixa na descrição da segunda lacuna, pois não exige a especificação de um comprimento máximo na declaração — ele tem um limite fixo do próprio tipo, mas não é declarado com tamanho.
Guarde a fronteira: fixo = CHAR, variável = VARCHAR. É exatamente nesse par que as alternativas se dividem.
Tipo de Dado
Comprimento
Armazenamento
Desempenho
CHAR
Fixo
Preenche com espaços em branco até o tamanho definido
Leitura mais rápida (acesso direto)
VARCHAR
Variável
Armazena apenas o conteúdo inserido + 1 ou 2 bytes de controle
Leitura mais lenta (processa prefixo de comprimento)
Alternativa A — ❌ Incorreta
A alternativa A (VARCHAR ... TEXT) inverte completamente os conceitos. O VARCHAR é o tipo de comprimento variável, não o fixo descrito na primeira lacuna. Além disso, o TEXT não é um tipo de comprimento variável com tamanho máximo declarado — ele é um tipo para strings longas, com limite próprio do tipo (65.535 bytes), e não se declara com um tamanho máximo como o VARCHAR(n). A primeira lacuna pede o tipo fixo (CHAR), e a segunda pede o variável com tamanho máximo (VARCHAR).
Alternativa B — ✅ Correta ⟵ GABARITO
A alternativa B (CHAR ... VARCHAR) preenche corretamente as lacunas. O CHAR é o tipo de comprimento fixo que preenche com espaços em branco até o tamanho definido — exatamente o que o enunciado descreve na primeira lacuna. O VARCHAR é o tipo de comprimento variável que requer a especificação de um comprimento máximo e armazena apenas o conteúdo inserido, mais 1 ou 2 bytes para registrar o comprimento — exatamente o que o enunciado descreve na segunda lacuna, inclusive com o exemplo de uma string de 5 caracteres ocupando apenas 5 caracteres de espaço.
Alternativa C — ❌ Incorreta
A alternativa C (TEXT ... CHAR) inverte a ordem e usa o tipo errado na primeira lacuna. O TEXT não é um tipo de comprimento fixo — ele é um tipo para strings longas, com limite próprio do tipo, e não preenche com espaços em branco. O CHAR, embora seja o tipo fixo, não é o que preenche a segunda lacuna, que descreve o tipo variável (VARCHAR). A ordem correta é CHAR (fixo) primeiro e VARCHAR (variável) segundo.
Alternativa D — ❌ Incorreta
A alternativa D (BIGINT ... TEXT) usa tipos completamente inadequados. O BIGINT é um tipo numérico inteiro (8 bytes), não um tipo de caractere. O TEXT é um tipo para strings longas, mas não é o tipo variável com tamanho máximo declarado descrito na segunda lacuna. Nenhum dos dois se encaixa na descrição de tipos de caracteres de comprimento fixo e variável.
Alternativa E — ❌ Incorreta
A alternativa E (CHAR ... DOUBLE) acerta o primeiro tipo (CHAR é o fixo), mas erra o segundo. O DOUBLE é um tipo numérico de ponto flutuante (aproximado), não um tipo de caractere. A segunda lacuna descreve o VARCHAR, que é o tipo de comprimento variável para strings. O DOUBLE não armazena caracteres e não tem relação com a descrição de armazenamento de strings.
PEGA ESSA DICA!
Para fixar, lembre-se do par: CHAR = fixo (preenche com espaços) e VARCHAR = variável (armazena só o conteúdo + bytes de controle). Na prova, quando o enunciado falar em "preencher com espaços em branco", a resposta é CHAR; quando falar em "comprimento variável" ou "bytes adicionais para registrar o comprimento", a resposta é VARCHAR. Desconfie de alternativas que tragam TEXT, BIGINT ou DOUBLE — eles não se encaixam na descrição de tipos de caracteres com tamanho declarado.