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

2022-08-31 11:32:46

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

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

答案 1

Strings & VARCHAR。

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

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

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

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

从评论中的对话中编辑:

  • 电话号码与数字有任何关系是更大的UI错误之一。最好将它们视为地址,并将其视为地址,它比电话“数字”更接近它们的实际含义和表示。

答案 2

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

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

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