PostgreSQL中用于电话号码的数据类型

14

我是postgresql的新手,有没有人能告诉我,在pgadmin中创建表时是否有特定的数据类型可用于存储电话号码,还是只能使用字符串?


2
请查看以下链接:https://dba.stackexchange.com/questions/164796/how-do-i-store-phone-numbers-in-postgresql - Amjad Shahzad
最好使用“字符”。 - Zakir Hossain
4
дёҚиҰҒдҪҝз”Ёchar(https://wiki.postgresql.org/wiki/Don't_Do_This#Don.27t_use_char.28n.29)пјҢдҪҝз”Ё`text`жҲ–`character varying`гҖӮиҜ·жіЁж„ҸпјҢзҝ»иҜ‘з»“жһңе·Із»Ҹиў«ж¶ҰиүІе№¶дҪҝе…¶жӣҙеҠ жҳ“жҮӮпјҢдҪҶжІЎжңүж”№еҸҳеҺҹе§ӢдҝЎжҒҜгҖӮ - user330315
我看到了链接,但它没有提到数据类型,例如文本或序列等。所以我应该选择文本数据类型吗? - joedenly
你应该使用字符串。 - Mohammad Aarif
投票关闭此问题,因为它已经在姊妹网站DBA.StackExchange.com上得到了解决。 - Basil Bourque
3个回答

23

我建议使用text并添加一个检查约束条件,测试电话号码的有效性。

这是域(domain)的一个良好应用案例。特别是如果你需要在多个地方使用这样的列,拥有一个包含检查约束条件的域将是很方便的。


1
可能看起来像这样的域:CREATE DOMAIN iol.phone_number AS TEXT CHECK( VALUE ~ '^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$' ); - Neil Gaetano Lindberg
2
这个正则表达式不允许使用国家代码。这是我在你指向域名后为美国组织的应用程序添加的内容。我只是觉得如果那个链接移动了,一个小例子可能会有所帮助。 - Neil Gaetano Lindberg
1
或者对于美国,该域可能看起来很简单,如CREATE DOMAIN iol.phone_number AS VARCHAR(10) CHECK(VALUE ~ '^[0-9]{10}$'); - Y Y
那么什么适用于所有国家? - uberrebu
@uberrebu 可能什么都没有。如果我是你,那么在这种情况下我将不会检查号码的正确性。 - Laurenz Albe

3

0
  • 领域 phone.sql 用于验证国际E.164格式的电话号码。
  • 函数 phone_parse.sql 用于将电话号码解析为3个部分:country_codearea_codelocal_number

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接