>> Tecnologia Eletrônica >  >> Telefones >> Telefone Fixo

Design de Banco de Dados: Por Que Números de Telefone Devem Ser Strings

Em praticamente todo sistema de banco de dados, um campo de telefone deve usar string (VARCHAR/TEXT) — nunca numérico (INT, BIGINT, DECIMAL).

Motivos

  1. Caracteres de formatação: Parênteses, hífens, espaços, pontos, sinais de mais — ex.: +1 (555) 123-4567, 011-44-20-7123-4567.
  2. Zeros à esquerda importam: Muitos países têm zeros significativos (ex.: UK 020, Itália 06). Tipos numéricos os removem.
  3. Códigos de país e ramais: +44 20 7123 4567 ext. 123 — "ext." ou "x" alfanuméricos.
  4. Variabilidade de comprimento: 4–15+ dígitos por ITU-T E.164; limites numéricos (BIGINT máx 19 dígitos) arriscam overflow com formatação.
  5. Códigos de discagem não numéricos: *, #, pausas (,), esperas (;) em strings de discagem.
  6. Busca/Indexação: Padrões LIKE, correspondências parciais, normalização E.164 — tudo operações de string.

Schema de Boa Prática

CREATE TABLE contacts ( id BIGSERIAL PRIMARY KEY, phone_e164 VARCHAR(20) NOT NULL, -- normalizado: +15551234567 phone_display VARCHAR(30), -- formatado para UI: (555) 123-4567 phone_type VARCHAR(10), -- mobile, landline, voip, fax extension VARCHAR(10), -- opcional UNIQUE (phone_e164) );

Dica de Normalização

Armazene duas colunas: phone_e164 canônico (só dígitos, + inicial) para indexação/busca, e phone_display para formatação visual. Remova não-dígitos na entrada; use libphonenumber (biblioteca do Google) para validação/formatação.