Porque armazenar numéricos como String?

Uma dúvida comum para quem está começando é como armazenar coisas como CPF, RG, Telefone ou coisas do gênero. Devemos usar números ou texto?

São valores, à princípio, compostos por números. É natural pensar em armazenar como inteiro: int ou Integer no Java; INTEGER nos bancos de dados que atendem ao padrão ANSI).

Algumas pessoas pensam em valor com pontos flutuantes (float ou double) porque podem representar dígitos nas casas decimais.

Além disso, armazenar um número é muito mais eficiente (em termos de espaço) que armazenar um texto: no MySQL, um INT pode armazenar valores de até 9 dígitos em 4 bytes enquanto um VARCHAR teria que usar até 10 bytes.

Mas será que economizar bytes de armazenamento é tão importante em uma época que você pode levar uns 32 bilhões de bytes no bolso?

Armazenar RG, CPF ou Telefone como texto é vantajoso porque:

  • zeros à esquerda são importantes e números iriam removê-los;
  • valores negativos não fazem sentido (e não existem unsigned ints em Java);
  • não faremos cálculos ou contagens com esses valores;
  • o importante não são os números, mas os caracteres que, por acaso, são numéricos;
  • o RG, por exemplo, pode ter letras. É regra em Minas Gerais;
  • guardar a formatação original com, p. ex., parênteses e traços pode ser interessante.

Ao modelar a sua aplicação, é fundamental comparar as alternativas. Facilidade de manutenção, corretude, rapidez de desenvolvimento (não gosto de usar o termo produtividade) devem ser favorecidas em relação a performance crua.

Anúncios