Which is best data type for phone number in MySQL and what should Java type mapping for it be?

JavaMysqlPhone NumberDigits

Java Problem Overview


I am using MySQL with the Spring JDBC template for my web application. I need to store phone numbers with only digits (10). I am a little bit confused about data type using data type.

  1. What is the preferable data type for it in MySQL?
  2. What should be the Java data type in Bean (POJO) classes for that?
  3. How can I validate that datatype with javax validations/constraints for length and also only digit allowed?

Java Solutions


Solution 1 - Java

Strings & VARCHAR.

  • Do not try storing phone numbers as actual numbers. it will ruin the formatting, remove preceding 0s and other undesirable things.

  • You may, if you choose to, restrict user inputs to just numeric values but even in that case, keep your backing persisted data as characters/strings and not numbers.

  • Be aware of the wider world and how their number lengths and formatting differ before you try to implement any sort of length restrictions, validations or masks (eg XXX-XXXX-XX).

  • Non numeric characters can be valid in phone numbers. A prime example being + as a replacement for 00 at the start of an international number.

Edited in from conversation in comments:

  • It is one of the bigger UI mistakes that phone numbers have anything to do with numerics. It is much better to think of and treat them like addresses, it is closer to what they actually are and represent than phone "numbers".

Solution 2 - Java

In MySQL -> INT(10) does not mean a 10-digit number, it means an integer with a display width of 10 digits. The maximum value for an INT in MySQL is 2147483647 (or 4294967295 if unsigned).

> You can use a BIGINT instead of INT to store it as a numeric. Using > BIGINT will save you 3 bytes per row over VARCHAR(10).

If you want to Store "Country + area + number separately". Try using a VARCHAR(20). This allows you the ability to store international phone numbers properly, should that need arise.

Solution 3 - Java

Consider using the E.164 format. For full international support, you'd need a VARCHAR of 15 digits.

See Twilio's recommendation for more information on localization of phone numbers.

Solution 4 - Java

  1. varchar

  2. String

  3. A simple regex. See: https://stackoverflow.com/questions/15111420/how-to-check-if-a-string-contains-only-digits-in-java. Use javax.constraints.Pattern.

Solution 5 - Java

VARCHAR with probably 15-20 length would be sufficient and would be the best option for the database. Since you would probably require various hyphens and plus signs along with your phone numbers.

Solution 6 - Java

you can use var-char,String,and int ,it depends on you, if you use only country code with mobile number than you can use int,if you use special formate for number than use String or var-char type, if you use var-char then must defile size of number and restrict from user.

Solution 7 - Java

It's all based on your requirement. if you are developing a small scale app and covers only specific region (target audience), you can choose BIGINT to store only numbers since VARCHAR consumes more byte than BIGINT ( having optimal memory usage design matters ). but if you are developing a large scale app and targets global users and you have enough database capabilities to store data, you can definitely choose VARCHAR.

Solution 8 - Java

  1. String
  2. Varchar

This is my opinion for my database as recommended by my mentor

Solution 9 - Java

My requirement is to display 10 digit phone number in the jsp. So here's the setup for me.
MySQL: numeric(10)

Java Side:

@NumberFormat(pattern = "#")  
private long mobileNumber;

and it worked!

Solution 10 - Java

In mysql: BIGINT. In java: Long.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVishal ZanzrukiaView Question on Stackoverflow
Solution 1 - JavaindivisibleView Answer on Stackoverflow
Solution 2 - JavaIrshad KhanView Answer on Stackoverflow
Solution 3 - Java00500005View Answer on Stackoverflow
Solution 4 - JavaGreyBeardedGeekView Answer on Stackoverflow
Solution 5 - JavaNcDreamyView Answer on Stackoverflow
Solution 6 - JavadamonView Answer on Stackoverflow
Solution 7 - Javabala rajaView Answer on Stackoverflow
Solution 8 - Javaduytung112View Answer on Stackoverflow
Solution 9 - JavamannedearView Answer on Stackoverflow
Solution 10 - JavaАлександр АверьяновView Answer on Stackoverflow