MySQL - ENUM - ISO 3166-1国家代码的好主意?

时间:2015-05-14 13:26:06

标签: php mysql database enums

我有一个MySQL数据库表,用于使用2位数(ISO 3166-1)国家/地区代码(例如美国=美国)标记数据库中的项目。

我正在考虑使用ENUM作为国家/地区代码标记列,因为国家/地区代码不会发生太大变化,而且大约有200个左右。此外,这个表可能会有很多行,所以我想使用ENUM将有助于它有效运作。

我听说过人们在其他情况下使用带有国家/地区代码的ENUM,但我不确定使用MySQL时这样做是否合理。

您如何看待 - 在MySQL中使用ENUM作为2位数国家/地区代码在我的案例中是个好主意?或者我会后悔这个决定吗?

我正在使用MySQL 5.6和PHP 5.5。

1 个答案:

答案 0 :(得分:2)

ENUM数据类型通常用于非常简单和不变的值,例如自定义布尔值(T / F,0/1,Heads / Tails)或非常小的值子集,它们不会像多选答​​案那样改变(A ,b,C,D,E)。

如果值会发生变化,我不建议使用ENUM数据类型(在我们不断变化边界的不稳定世界中就是这种情况)。它需要您在需要添加或更糟的时候更新表模式 - 从ENUM值列表中删除值。 ENUM数据类型非常适合那些需要确保它只是定义字段中的值之一的字段,并且在尝试列表外的值时需要进行错误检查。

我建议根据你如何表示国家代码,一个非常简单的变量两个字符字段(A2 ISO或A3 UN),一个小整数(NUM UN)。

使用单独的查找表(加入查询)来执行代码扩展和其他相关国家/地区数据(货币汇率,居住大陆等)。