我想将MySQL数据库转换为PostgreSQL。
在MySQL中,ENUM数据类型默认允许空字段,这似乎不适用于PostgreSQL。因此,我无法使用PostgreSQL从VARCHAR转换为ENUM,因为我的数据库中有很多空字段,而PgSQL不允许这样做。
我该怎么办?允许NULL并将空字段设置为NULL?在创建类型时,在PostgreSQL的ENUM中添加一个空值(类似于ENUM('A','B','C',''))?停止使用这种丑陋且不协调的ENUM数据类型(并使用varchar上的约束或其他表和外键)?
谢谢:)
user1527491
答案 0 :(得分:4)
如果你真的想在枚举中有空字符串值,你应该在创建类型时将它们添加到枚举中,是的。任何将空字符串接受到未明确允许空字符串的枚举的数据库都是错误的,如果您的应用程序依赖它,那也是错误的:)
如果这个想法意味着“未知”,那么使用NULL也是一个不错的选择 - 从纯粹的模型角度来看,可能更清晰。
它归结为一个典型的问题,即一些数据库和系统认为是null,而空字符串是相同的,当它们明显是不同的值时。