Pular para o conteúdo principal

Questão de Banco de Dados — MySQL — VUNESP 2024

Banco de DadosMySQL
Código
vu212070
Banca
VUNESP
Órgão
Pref Piracicaba
Ano
2024
Cargo
Tec (Piracicaba)

No banco de dados MySQL versão 8.2, em sua configuração original, os tipos de dados            e           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.

  1. AVARCHAR ... TEXT
  2. BCHAR ... VARCHAR
  3. CTEXT ... CHAR
  4. DBIGINT ... TEXT
  5. 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.

Gabarito: letra B

Link permanente: /questoes/vu212070