首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql数据类型混淆

mysql数据类型混淆
EN

Stack Overflow用户
提问于 2010-03-27 17:47:19
回答 2查看 276关注 0票数 0

因此,这是一个关于MySQL数据类型的更广泛的问题。在本例中,我想正确地存储一个5位的美国邮政编码(zip_code) .

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

代码语言:javascript
复制
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个不同的邮政编码中的一个,我们应该使用enum数据类型,对吗?

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

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

EN

回答 2

Stack Overflow用户

发布于 2010-03-27 17:58:08

邮政编码应该是整数..。米杜明是你要找的东西。对于ENUM来说,几千个不同的值不是个好主意--此外,IIRC ENUM仅限于64个不同的值。

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

票数 1
EN

Stack Overflow用户

发布于 2010-03-27 19:50:36

如果smallint未签名(0到65535)太小,则更改为中介。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2530270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档