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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1210)

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

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

字符串和VARCHAR。

  • 请勿尝试将电话号码存储为实际号码。它会破坏格式,删除前面的0s和其他不受欢迎的东西。
  • 如果您选择,您可以将用户输入限制为仅数值,但即使在这种情况下,也可以将支持持久数据保留为字符/字符串而不是数字。
  • 在尝试实施任何类型的长度限制,验证或掩码(例如XXX-XXXX-XX)之前,请注意更广泛的世界以及它们的数字长度和格式如何不同。
  • 非数字字符在电话号码中有效。一个典型的例子是+作为00国际号码开头的替代品。

在评论中的对话中编辑:

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

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

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

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

扫码关注云+社区

领取腾讯云代金券