4. Textos Curtos & Variáveis
CHAR(n) (Texto de Tamanho Fixo)
Texto de comprimento EXATO e fixo para siglas (UF), CPF, CNPJ, CEP, códigos ISO e hashes.
💾 Espaço em Disco: Fixo: n caracteres (em ASCII/latin1 = n bytes; em utf8mb4 = n até 4*n bytes)
📏 Limites: De 0 até 255 caracteres
O tipo CHAR(n) reserva espaço fixo para exatamente `n` caracteres. Não gasta byte extra para gravar o comprimento da string e oferece leitura e indexação ligeiramente mais rápidas quando todos os valores possuem sempre a mesma quantidade de caracteres.
✅ Quando Usar
- •Sigla de Estado / UF (`CHAR(2)` -> `SP`, `RJ`, `MG`).
- •Código ISO de País ou Moeda (`CHAR(2)` -> `BR`, `US` ou `CHAR(3)` -> `BRL`, `USD`).
- •CPF sem pontuação (`CHAR(11)`), CNPJ sem pontuação (`CHAR(14)`), CEP sem traço (`CHAR(8)`).
- •Hashes hexadecimais de tamanho fixo: SHA-256 (`CHAR(64)`), MD5 (`CHAR(32)`), UUID (`CHAR(36)`).
🚫 Quando NÃO Usar
- •Nomes de pessoas, endereços ou textos cujo tamanho varia bastante (desperdiça espaço — use `VARCHAR`).
📐 Configuração no DrawDB
- Type:
- CHAR
- Size / Values:
- Ex: 2 (UF), 8 (CEP), 11 (CPF), 14 (CNPJ), 64 (SHA-256)
- Default:
- Ex: BR (para país) ou BRL (para moeda)
MySQL / MariaDB
CHAR(11)
PostgreSQL
CHAR(11)
SQLite
TEXT
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE enderecos_faturamento (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cliente_id BIGINT UNSIGNED NOT NULL,
cpf CHAR(11) NOT NULL UNIQUE,
cep CHAR(8) NOT NULL,
uf CHAR(2) NOT NULL,
pais CHAR(2) NOT NULL DEFAULT 'BR'
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);
// Higienizando CPF e CEP no PHP (removendo pontos e traços antes de salvar em CHAR)
$cpfBruto = '123.456.789-01';
$cepBruto = '01310-100';
$ufBruta = 'sp';
$cpf = preg_replace('/\D/', '', $cpfBruto); // "12345678901" (11 dígitos)
$cep = preg_replace('/\D/', '', $cepBruto); // "01310100" (8 dígitos)
$uf = strtoupper(trim($ufBruta)); // "SP" (2 letras)
if (strlen($cpf) !== 11 || strlen($cep) !== 8 || strlen($uf) !== 2) {
throw new InvalidArgumentException('Dados com tamanho incorreto para os campos CHAR.');
}
$stmt = $pdo->prepare('
INSERT INTO enderecos_faturamento (cliente_id, cpf, cep, uf)
VALUES (:cliente_id, :cpf, :cep, :uf)
');
$stmt->bindValue(':cliente_id', 1, PDO::PARAM_INT);
$stmt->bindValue(':cpf', $cpf, PDO::PARAM_STR);
$stmt->bindValue(':cep', $cep, PDO::PARAM_STR);
$stmt->bindValue(':uf', $uf, PDO::PARAM_STR);
$stmt->execute();