mysql数据类型困惑

标签 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 个不同邮政编码之一,我们应该使用 enum 数据类型,对吗?

现在考虑一个更大范围内的类似场景。在一个州,有 500 个城市,有 418 个不同的邮政编码。

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

最佳答案

邮政编码应该是整数... MEDIUMINT这就是您正在寻找的。对于 ENUM 来说,几千个不同的值并不是一个好主意 - 此外 IIRC ENUM 仅限于 64 个不同的值。

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

关于mysql数据类型困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530270/

相关文章:

C# 我应该在这里投什么类型?

iphone - 检查 C 枚举是否存在

Java - 枚举作为可选

java - 从同一 java 项目中的另一个类调用 Enum 值

php - 模拟搜索并获取返回行的行号(从总数中)

mysql - 删除经典 ASP/VBScript 中的四字节 UTF-8 字符(MySQL 相关)

mysql - MYSQL 中的日期格式不正确

mysql - 在 MySQL 中使用 SQL_CALC_FOUND_ROWS 时对查询速度有影响吗?

go - 将自定义类型断言为基本类型

c++ - 什么时候 uint8_t ≠ unsigned char?