【问题标题】:Mysql Datatype for US Zip (Postal Codes)美国邮政编码的 Mysql 数据类型
【发布时间】:2010-12-02 09:50:30
【问题描述】:

我正在编写一个特定于美国的 Web 应用程序,因此其他国家/地区用于邮政编码的格式并不重要。我有一个我们的邮政编码列表,我正在尝试将其加载到包含

的数据库表中
  • 5 位美国邮政编码
  • 纬度
  • 经度
  • usps 分类代码
  • 州代码
  • 城市

邮政编码是主键,因为它是我要查询的。我开始使用中等 int 5,但这会截断具有前导零的邮政编码。

我考虑过使用 char5,但担心索引 char 变量会影响性能。

所以我的问题是存储邮政编码的最佳 mysql 数据类型是什么?

注意:我在其他几个与邮政编码相关的问题中看到了它。我只对美国 5 位数的邮政编码感兴趣。因此无需考虑其他国家/地区的邮政编码格式。

【问题讨论】:

  • 保留前导零的附加值是什么?只要您显示前导零 (.PadLeft),我就会尽可能优化您的数据库。
  • 零是邮政编码中的重要数据。邮政编码不是整数,即使它们完全由数字组成。
  • 这是一个公平的观点。我做了一些测试用例查询 00210 等,它返回了正确的记录。我想这更像是对数据完整性的担忧。
  • 较新的 Zip+4 代码怎么样?例如:91210-3889
  • @rlb.usa 据我所知,zip+4 格式仅在该邮政编码中提供更具体的位置修复,而且我没有那么精确的数据集,而且事实上当前 zip 的精度符合我的要求,我并不担心。

标签: sql mysql database-design data-modeling zipcode


【解决方案1】:

char(5) 是正确的方法。字符串索引非常快,尤其是当它是一个如此小的数据集时。

你是正确的,你不应该使用整数作为邮政编码,因为它不是真正的数字数据。

编辑添加: 看看这个为什么你不使用数字来表示非数字重要数据的充分理由: Is it a good idea to use an integer column for storing US ZIP codes in a database?

【讨论】:

  • Erich:为什么不是整数?我认为存储为整数将有助于类型检查,您可以在客户端添加前导零,字符可以是非数字......只是想知道我错过了什么。
  • 数据集可能是数百万。系统中很可能会有其他地址存储 zip,并且它们都应该是相同的类型
  • 邮政编码不是数字数据。数字数据是对其进行数学运算有意义的数据,而邮政编码永远不会这样做。否则,您将不公平地限制您的数据集。就数据集大小而言,如果Zip code真的是PK的话,只有99999个值,相对来说是一个很小的数据集。
  • 如果您有 1000 万客户的邮政编码是一个大数据集
  • John:不应使用整数,因为邮政编码“00501”将存储为“501”,这可能会产生问题。
【解决方案2】:

使用您的中等 INT(5) ZEROFILL,它应该为您添加前导零。无需在格式化问题上影响索引和性能。

【讨论】:

  • 作为 char 5 需要 0.0007 秒,而 medint5 zerofill 需要 0.0006 秒。我认为两者都是有效的解决方案,但我认为我将使用 char5 并采取轻微的性能打击,以便在数据完整性方面更加安心。
【解决方案3】:

如果他是 Char(6),那么他也可以处理加拿大的邮政编码。

如果您考虑到最多有 100,000 个 5 位数的邮政编码,并且即使您将整个表设为内存驻留,它所占用的空间也很少,那么没有理由不这样做。

【讨论】:

  • 我从原始帖子中看到了这一点。我只是想我会提到它,以防其他人在未来看到这个问题寻求建议,但遇到外国邮政编码可能会产生影响的情况。我的主要观点是,在千兆字节记忆棒时代,邮政编码表非常小。 (当内存以千字节为单位时,我处理了这些)
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 2013-03-28
  • 2019-02-25
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多