美国邮政编码的Mysql数据类型

美国邮政编码的Mysql数据类型,sql,mysql,database-design,data-modeling,zipcode,Sql,Mysql,Database Design,Data Modeling,Zipcode,我正在编写一个特定于美国的web应用程序,因此其他国家使用的邮政编码格式并不重要。我有一个美国邮政编码列表,我正试图将其加载到包含 5位美国邮政编码 纬度 经度 美国邮政分类代码 州代码 城市 邮政编码是主键,因为它是我将查询的对象。我开始使用中整数5,但它会截断前导为零的邮政编码 我考虑过使用char5,但担心针对char变量进行索引会对性能造成影响 所以我的问题是,存储邮政编码的最佳mysql数据类型是什么 注意:我在其他几个与邮政编码相关的问题中也看到了这一点。我只对我们5位数的邮政编

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

  • 5位美国邮政编码
  • 纬度
  • 经度
  • 美国邮政分类代码
  • 州代码
  • 城市
邮政编码是主键,因为它是我将查询的对象。我开始使用中整数5,但它会截断前导为零的邮政编码

我考虑过使用char5,但担心针对char变量进行索引会对性能造成影响

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

注意:我在其他几个与邮政编码相关的问题中也看到了这一点。我只对我们5位数的邮政编码感兴趣。因此,没有必要考虑其他国家的邮政编码格式。

char(5)是正确的方法。字符串索引相当快,特别是当它是如此小的数据集时

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

编辑以添加: 请查看此项,了解为什么不将数字用于非数字重要数据的原因:

使用中等整数(5)零填充,它应该为您添加前导零。不需要在格式化问题上影响索引和性能。

如果他将其设置为Char(6),那么他也可以处理加拿大邮政编码


当你考虑最多有100000个5位的邮政编码时,即使你让整个表内存驻留,也没有多少空间,没有理由不。

保持领先的零的值是什么?只要您显示前导零(.PadLeft),我将尽可能优化您的数据库。零是邮政编码中的重要数据。邮政编码不是整数,即使它们完全由数字组成。这是一个公平的观点。我做了一些查询00210等的测试用例,它返回了正确的记录。我想这更多的是出于对数据完整性的担忧。那么新的Zip+4代码呢?例:91210-3889@rlb.usa据我所知,zip+4格式只在该邮政编码中提供了一个更具体的位置定位,由于我没有精确的数据集,而且当前zip的精度满足我的要求,我并不担心。埃里克:为什么不是整数?我认为存储为整数将有助于类型检查,您可以在客户端添加前导零,字符可以是非数字。。。只是想知道我遗漏了什么。数据集可能有数百万。在存储zip的系统中,很可能会有其他地址,它们都应该是相同类型的zip代码不是数字数据。数字数据是对其进行数学运算是有意义的数据,这是邮政编码所无法做到的。否则,您将不公平地限制数据集。就数据集大小而言,如果邮政编码确实是PK,则只有99999个值,相对而言,这是一个非常小的数据集。如果有1000万客户的邮政编码是一个大数据集,则不应使用整数,因为邮政编码“00501”将存储为“501”这可能会产生问题。作为字符5,需要0.0007秒;作为medint5 zerofill,需要0.0006秒。我认为这两个都是有效的解决方案,但我认为我将使用char5,并在数据完整性方面承受轻微的性能损失,以获得更大的安心。我只是觉得我应该提一下,以防将来有人在这个问题上寻求建议,但遇到外国邮政编码可能会有所不同的情况。我的主要观点是,在千兆字节记忆棒的时代,邮政编码表非常小。(当以千字节为单位测量内存时,我处理了这些问题)