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

Vis*_*kia 49 java mysql phone-number digit

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

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

ind*_*ble 57

字符串和VARCHAR.

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

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

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

  • 非数字字符在电话号码中有效.一个典型的例子是+作为00国际号码开头的替代品.

在评论中的对话中编辑:

  • 这是电话号码与数字有关的更大的UI错误之一.考虑和处理它们就像地址一样好得多,它更接近它们实际所代表的东西而不是手机"数字".


Irs*_*han 13

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

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

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


005*_*005 6

考虑使用E.164格式。为了获得全面的国际支持,您需要15位VARCHAR。

有关电话号码本地化的更多信息,请参见Twilio的建议

  • 与 [E.123](https://en.wikipedia.org/wiki/E.123) 有什么区别? (3认同)

Gre*_*eek 5

  1. 变量字符
  2. 细绳

  3. 一个简单的正则表达式。请参阅:如何检查字符串是否仅包含 Java 中的数字。使用 javax.constraints.Pattern。