TLDR;如果我将电话号码存储在 MySQL(或任何具有等效约束的数据库)中,正确的格式是将 E.164 值放入 VARCHAR(32) 字段吗?
一直在阅读国际电话号码的格式/存储。过去由于各种原因,建议将其存储为字符串,因为此数据是标识符而不是实际数字(以及诸如前导 0 之类的问题)。我知道我不应该尝试通过正则表达式解析/验证电话号码,并且通常建议使用 Google 开发的 libphonenumber 来处理此问题并生成 E.164 格式的值。
我假设可以肯定地说 E.164 是当今最适合电话号码的存储格式。由于前导 + 似乎不需要并且前导 0 不会以这种格式出现?我已经看到 BIGINT(15) 建议将其存储在 MySQL 数据库中。这将需要一个额外的字段(字符串?)来支持带有分机号码的电话号码。它没有在维基百科文章中说明,但我在博客文章中看到很多提到 E.164 格式通过附加“;ext=12345”来支持扩展,那么存储到 VARCHAR(32) 字段是否更可取?“+19995556789;ext=12345”,这种格式的最大长度应该是32,那么32的长度合适吗?<+><;ext=>
编辑:我不确定扩展值到底应该是什么,根据这个它是 11,但是链接到的文章已经修改并被 Apple 存档,那里没有关于扩展长度的明确信息。最好只是达到更高的限制,例如 VARCHAR(50),还是使用 BIGINT(15) 和一个附加字段用于可空的扩展?