Qual é o melhor tipo de dados para o número de telefone no MySQL e qual deve ser o mapeamento do tipo Java para ele?

Estou a utilizar o MySQL com modelo Spring JDBC para a minha aplicação web. Preciso de armazenar o número de telefone com apenas dígitos (10). Estou um pouco confuso quanto ao tipo de dados que utilizam o tipo de dados.

  1. Qual é o tipo de dados preferível para ele no MySQL?
  2. Qual deve ser o tipo de dados Java em classes de feijão (POJO) para isso?
  3. Como posso validar esse tipo de dados com validações/constrições javax para comprimento e também apenas dígitos permitidos?

Strings & VARCHAR.

  • Não tente armazenar números de telefone como números reais. arruinará a formatação, removerá os anteriores 0s e outras coisas indesejáveis.

  • Pode, se o desejar, restringir as entradas do utilizador apenas a valores numéricos, mas mesmo nesse caso, manter o seu respaldo dados persistentes como caracteres/cordas e não números.

  • Esteja ciente do mundo em geral e de como o seu número de comprimentos e formatação diferem antes de tentar implementar qualquer tipo de restrições de comprimento, validações ou máscaras (por exemplo XXX-XXXX-XX).

  • Os caracteres não numéricos podem ser válidos em números de telefone. Um exemplo principal sendo + como substituto de 00 no início de um número internacional.

Editado a partir de conversas em comentários:

  • É um dos maiores erros da IU que os números de telefone têm alguma coisa a ver com números de telefone. É muito melhor pensar e tratá-los como endereços, é mais próximo daquilo que são e representam do que telefone "números".
Comentários (8)
  1. varchar

  2. Cordão

  3. Um simples regex. Ver: https://stackoverflow.com/questions/15111420/how-to-check-if-a-string-contains-only-digits-in-java. Usar javax.constraints.Pattern.

Comentários (0)

VARCHAR com provavelmente 15-20 de comprimento seria suficiente e seria a melhor opção para a base de dados. Uma vez que provavelmente precisaria de vários hífenes e sinais de adição juntamente com os seus números de telefone.

Comentários (0)