Alexis Morales Asked: 2019-03-11 13:27:17 +0800 CST2019-03-11 13:27:17 +0800 CST 2019-03-11 13:27:17 +0800 CST 你会在 SQL 中使用 ENUM 做什么? 772 我正在尝试完成我的 CIS 课程的作业,并且我需要包含一个名为 ENUM 的数据类型。我知道这代表枚举列表,但我不确定何时是使用 ENUM 的合适时间。我正在使用的书中给出的几个例子就像一张大陆列表。我可以用它来描述工作场所的部门列表吗? enum 2 个回答 Voted Best Answer Nicolas Payart 2019-03-12T03:27:12+08:002019-03-12T03:27:12+08:00 ENUM 数据类型可以看作是“人类可读”的数值,通常用于方便和数据存储效率。 让我们以列出国家及其各自大陆的表格为例。 使用 VARCHAR CREATE TABLE country_continent ( country VARCHAR(100), continent VARCHAR(100) ); INSERT INTO country_continent VALUES ('Kenya', 'Africa'); INSERT INTO country_continent VALUES ('New-York', 'America'); INSERT INTO country_continent VALUES ('Paris', 'Europe'); 使用 SMALLINT 为了获得更好的存储效率,您最好使用 SMALLINT(2 个字节)而不是 VARCHAR(通常是 1 个字节 + 字符串的长度)作为大陆字段: CREATE TABLE continents ( id SMALLINT, label VARCHAR(100) ); INSERT INTO continents VALUES (1, 'Africa'); INSERT INTO continents VALUES (2, 'America'); INSERT INTO continents VALUES (3, 'Europe'); CREATE TABLE country_continent ( country VARCHAR(100), continent_id SMALLINT ); INSERT INTO country_continent VALUES ('Kenya', 1); INSERT INTO country_continent VALUES ('New-York', 2); INSERT INTO country_continent VALUES ('Paris', 3); 使用枚举 这是 ENUM 有意义的地方: CREATE TABLE country_continent ( country VARCHAR(100), continent ENUM('Africa', 'America', 'Antarctica', 'Asia', 'Europe', 'Oceania') ); INSERT INTO country_continent VALUES ('Kenya', 'Africa'); INSERT INTO country_continent VALUES ('New-York', 'America'); INSERT INTO country_continent VALUES ('Paris', 'Europe'); 使用 ENUM,您可以获得与 SMALLINT 相同的存储效率(甚至更好),但 VARCHAR 数据类型易于使用。 World Wide DBA 2019-03-11T13:48:46+08:002019-03-11T13:48:46+08:00 通常枚举用于静态列表,即永远不会改变的列表。部门是一个糟糕的选择,因为这些随时可能发生变化。大陆是好的,因为它们极不可能改变,但国家会不好,因为它们确实会改变。想想那些是常数的东西,比如季节、月份、星期几等……你想让枚举保持小。作为我个人应用的一般规则,如果一个枚举需要 10 个或更多条目,我会创建一个常规列表。
ENUM 数据类型可以看作是“人类可读”的数值,通常用于方便和数据存储效率。
让我们以列出国家及其各自大陆的表格为例。
使用 VARCHAR
使用 SMALLINT
为了获得更好的存储效率,您最好使用 SMALLINT(2 个字节)而不是 VARCHAR(通常是 1 个字节 + 字符串的长度)作为大陆字段:
使用枚举
这是 ENUM 有意义的地方:
使用 ENUM,您可以获得与 SMALLINT 相同的存储效率(甚至更好),但 VARCHAR 数据类型易于使用。
通常枚举用于静态列表,即永远不会改变的列表。部门是一个糟糕的选择,因为这些随时可能发生变化。大陆是好的,因为它们极不可能改变,但国家会不好,因为它们确实会改变。想想那些是常数的东西,比如季节、月份、星期几等……你想让枚举保持小。作为我个人应用的一般规则,如果一个枚举需要 10 个或更多条目,我会创建一个常规列表。