哪个是MySQL中电话号码的最佳数据类型,它的Java类型映射应该是什么?

时间:2014-06-22 17:25:36

标签: java mysql phone-number digit

我在我的Web应用程序中使用带有Spring JDBC模板的MySQL。我需要存储只有数字(10)的电话号码。我对使用数据类型的数据类型感到困惑。

  1. MySQL的首选数据类型是什么?
  2. Bean(POJO)类中的Java数据类型应该是什么?
  3. 如何使用javax验证/约束来验证该数据类型的长度,并且只允许数字?

10 个答案:

答案 0 :(得分:50)

Strings& VARCHAR。

  • 请勿尝试将电话号码存储为实际号码。它会破坏格式,删除前面的0和其他不受欢迎的东西。

  • 如果您选择,您可以将用户输入限制为仅数字值,但即使在这种情况下,也要将支持持久数据保留为字符/字符串而不是数字。

  • 在尝试实施任何类型的长度限制,验证或掩码(例如XXX-XXXX-XX)之前,请注意更广阔的世界以及它们的数字长度和格式不同。

  • 非数字字符在电话号码中有效。一个主要的例子是+,作为国际号码开头的00的替代。

在评论中的对话中编辑:

  • 电话号码与数字有关,这是更大的UI错误之一。把它们当作地址来考虑和对待它们要好得多,它更接近它们实际所代表的东西而不是手机“数字”。

答案 1 :(得分:12)

在MySQL中 - > INT(10)不是指10位数字,它表示显示宽度为10位的整数。 MySQL中INT的最大值是2147483647(如果是无符号,则为4294967295)。

  

您可以使用BIGINT而不是INT将其存储为数字。运用   BIGINT将在VARCHAR(10)上为每行节省3个字节。

如果您想分别存储“国家/地区+号码”。尝试使用VARCHAR(20)。这使您能够在需要时正确存储国际电话号码。

答案 2 :(得分:4)

考虑使用E.164格式。要获得完整的国际支持,您需要一个15位的VARCHAR。

有关电话号码本地化的详细信息,请参阅Twilio's recommendation

答案 3 :(得分:2)

  1. VARCHAR
  2. 字符串

  3. 一个简单的正则表达式。见:How to check if a string contains only digits in Java。使用javax.constraints.Pattern。

答案 4 :(得分:1)

你可以使用var-char,String和int,它取决于你,如果你只使用带有移动号码的国家代码而不是你可以使用int,如果你使用特殊的格式编号而不是使用String或var-char类型,如果你使用var-char,那么必须玷污数字大小并限制用户。

答案 5 :(得分:0)

大约15-20长度的VARCHAR就足够了,并且是数据库的最佳选择。因为你可能需要各种连字符和加号以及你的电话号码。

答案 6 :(得分:0)

在mysql中:BIGINT。 在java:Long。

答案 7 :(得分:0)

这完全取决于您的要求。如果您正在开发小型应用程序并且仅覆盖特定区域(目标受众),则可以选择BIGINT仅存储数字,因为VARCHAR比BIGINT消耗更多的字节(具有最佳的内存使用设计问题)。但是,如果您正在开发大型应用程序并面向全球用户,并且您具有足够的数据库功能来存储数据,则可以选择VARCHAR。

答案 8 :(得分:0)

  1. 字符串
  2. Varchar

这是我的导师推荐的对数据库的看法

答案 9 :(得分:-1)

我的要求是在jsp中显示10位电话号码。所以这是给我的设置。
MySQL:numeric(10)

Java Side:

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

成功了!