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.
- Qual é o tipo de dados preferível para ele no MySQL?
- Qual deve ser o tipo de dados Java em classes de feijão (POJO) para isso?
- Como posso validar esse tipo de dados com validações/constrições javax para comprimento e também apenas dígitos permitidos?
49
3
Strings & VARCHAR.
Não tente armazenar números de telefone como números reais. arruinará a formatação, removerá os anteriores
0
s 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 de00
no início de um número internacional.Editado a partir de conversas em comentários:
varchar
Cordão
Um simples regex. Ver: https://stackoverflow.com/questions/15111420/how-to-check-if-a-string-contains-only-digits-in-java. Usar javax.constraints.Pattern.
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.