我正在尝试构建一个包含邮政编码数据的数据库表(稍后在我的应用程序中引用)。
我抓取http://www.populardata.com/zipcode_database.html的.csv
文件,该文件包含以下数据:
到目前为止我尝试的是:
CREATE TABLE `finder_zip_codes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`zip` mediumint(128) DEFAULT '0',
`latitude` varchar(128) DEFAULT NULL,
`longitude` varchar(128) DEFAULT NULL,
`city` varchar(128) DEFAULT NULL,
`state` varchar(128) DEFAULT NULL,
`county` varchar(128) DEFAULT NULL,
`zip_class` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
但是因为我是MySQL的新手,所以最好的做法等等都悄悄告诉我。例如,zip
表似乎剥离了邮政编码的开头。我查看了ZEROFILL
,但我不认为'我想要的是什么,我基本上想要使用zip
作为int字段,但是不能自动更正其中的数据(或者截断它)。
任何帮助都会非常感激 - 我一直在尝试一些doc网站,这是我到目前为止所提出的 - 所以任何额外的提示都会很棒。谢谢!
答案 0 :(得分:3)
您可能不想要将邮政编码存储为整数字段,因为它实际上不是整数。它看起来像一个,但对它执行整数运算是没有意义的(例如,你永远不会12034 + 32523
- 这将是荒谬的。)
最好将其存储为char(5)
字段,因为它实际上就是这样 - 一个5个字符的字符串,恰好被限制为只包含数字。
修改强>
Latitude
和Longitude
可以存储为数字数据类型(可能是十进制或双精度),因为它们实际是数字:)
答案 1 :(得分:1)
整数的存储方式与数字相同。最有可能的是,它不是“剥离” - 您用来查看表格的界面正在删除前导零以使其对人类友好。
同样,当您在屏幕或报告上生成零时,也应该使用零填充。
答案 2 :(得分:0)
我们经常收到这个问题,因为我们销售邮政编码数据。默认情况下,Microsoft产品会删除前导零和波多黎各,新英格兰和部分新泽西邮政编码有一个或多个前导零。我在SQL中看到的最好方法是使用:RIGHT(100000 + zip,5)。
这也适用于墨西哥邮政编码和您想要前导零的任何整数。您只需更改逗号后的零数和整数表达式。例如,如果您需要一个6位数的支票号字段,那么您将拥有前导零:RIGHT(1000000 + check_num,6)
答案 3 :(得分:0)
看来你限制了美国的邮政编码。您可能也想考虑外国邮政编码。在这种情况下,您需要重新构建数据库架构以包含国家/地区。这将需要多个表(规范化)以及表之间的外键关联。示例:country_id和state_id。
此外,国家/地区的邮政编码格式也不同。参考:http://en.wikipedia.org/wiki/List_of_postal_codes。
我建议你为表名提供一个更有意义的名称,而不是finder_zip_codes。我们通常不使用复数形式的表名(删除尾随's')。此外,表名应为名词,'finder'表示动词。更好的名称是usa_zip_code。
此外,主键通常是表的名称,后跟'id'。示例:usa_zip_code_id。这样,当你将另一个表中的usa_zip_code_id作为外键时,你会立即知道它所引用的表。最后,考虑哪些列不应为null和/或唯一。