mysql数据类型混乱

时间:2010-03-27 17:47:20

标签: mysql types enums int sqldatatypes

因此,这更像是关于MySQL数据类型的一般化问题。我想在此示例中正确存储5位数的美国邮政编码( zip_code )。

一个县有10个不同的城市和5个不同的邮政编码。

city   | zip code
-------+----------
city 0 | 33333
city 1 | 11111
city 2 | 22222
city 3 | 33333
city 4 | 44444
city 5 | 55555
city 6 | 33333
city 7 | 33333
city 8 | 44444
city 9 | 22222

我通常会将这样的表构造为varchar(50),int(5),而不是三思而后行。

(1)如果我们想确保此表只有5种不同的邮政编码中的一种,我们应该使用枚举数据类型,对吗?

现在想一个更大规模的类似场景。在一个州,有500个城市,有418个不同的邮政编码。

(2)我应该将418个邮政编码存储为枚举数据类型还是 int 并创建另一个表来引用?

2 个答案:

答案 0 :(得分:1)

Zipcodes应该是整数... MEDIUMINT是您正在寻找的。 ENUM只有几千个不同的值不是好主意 - 除了IIRC ENUM限制为64个不同的值。

您可以创建另一个名为city的表来存储城市。结构非常简单:只需要​​城市名称的标准ID +列 - VARCHAR(50)即可。 当然,您必须将city_id添加到zipcodes表(附加了外键)。

答案 1 :(得分:0)

如果smallint unsigned(0到65535)太小则更改为mediumint。

create table city(
 city_id smallint unsigned not null auto_increment primary key,
 name varchar(255) not null
)engine=innodb;

create table city_zip(
 city_id smallint unsigned not null,
 zip_code smallint unsigned not null,
 primary key (city_id, zip_code)
)engine=innodb;