Mysql 空 ENUM 到 postgresql ENUM

标签 mysql postgresql enums database-migration database

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

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

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

谢谢:)

用户1527491

最佳答案

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

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

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

关于Mysql 空 ENUM 到 postgresql ENUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290763/

相关文章:

sql - PostgreSQL 数据库模型

c - 枚举范围

C++ 枚举名称重叠

mysql - Sea Quail 生成的 MySQL SQL 数据导致 #1064 SQL 错误

php - Laravel:单击按钮更新列的值

mysql - Laravel Eloquent 或 DB 中的批量更新

sql - 用另一个列的总和更新列

php - 列出某人的最新动态

sql - 在 SQL 中选择时间戳范围

c++ - switch 语句中的枚举数据类型 C++