Mysql 空 ENUM 到 postgresql ENUM

use*_*491 2 mysql database postgresql enums database-migration

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

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

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

谢谢 :)

用户1527491

Mag*_*der 5

如果您确实希望枚举中包含空字符串值,则应该在创建类型时将它们添加到枚举中,是的。任何接受空字符串到枚举中但不明确允许空字符串的数据库都是有问题的,如果您的应用程序依赖它,那也是有问题的:)

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

这归结为一个经典问题:某些数据库和系统将 null 和空字符串视为同一事物,而实际上它们是明显不同的值。