2

我想将 MySQL 数据库转换为 PostgreSQL。

在 MySQL 中,ENUM 数据类型默认允许空字段,这似乎不适用于 PostgreSQL。因此,我不能使用 PostgreSQL 从 VARCHAR 转换为 ENUM,因为我的数据库中有很多 PgSQL 不允许的空字段。

我能做什么?允许 NULL 并将空字段设置为 NULL ?创建类型时在 PostgreSQL 的 ENUM 中添加一个空值(类似于 ENUM('A','B','C',''))?停止使用这种丑陋且不协调的 ENUM 数据类型(并在 varchar 或另一个表和外键上使用约束)?

谢谢 :)

用户1527491

4

1 回答 1

4

如果你真的想在枚举中有空字符串值,你应该在创建类型时将它们添加到枚举中,是的。任何接受空字符串到没有明确允许空字符串的枚举的数据库都是错误的,如果您的应用程序依赖它,那也是错误的:)

如果这个想法是它意味着“未知”,那么使用 NULL 也是一个不错的选择——从纯模型的角度来看,可能更清晰。

归结为一些数据库和系统认为 null 和空字符串是同一事物的经典问题,而它们显然是不同的值。

于 2013-08-17T16:20:24.910 回答