sql - 如何将空字符串设为空值以允许在可选字段中重复空字符串?

标签 sql postgresql unique-constraint unique-key

我有一个可选的电子邮件字段。正则表达式可以很好地接受空字符串 (^$),但现在的问题是空字符串被视为唯一条目。它只允许一个用户在不输入电子邮件地址的情况下注册。我知道我必须将其设置为 null,但不确定如何设置。

像这样:

Duplicate entry '' for key 'users_email_unique' empty field

Error: Duplicate entry '' for key 'email'

最佳答案

你可以使用 partial index :

CREATE UNIQUE INDEX idx_unq_tab_email ON tab(email) WHERE TRIM(email) <> '';

DBFiddle Demo

这样你仍然有 UNIQUE 约束加上原始值。

关于sql - 如何将空字符串设为空值以允许在可选字段中重复空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49087149/

相关文章:

sql - 表中每天的值总和

sql - 在另一个子查询中使用子查询中的字段值,其中 PostgreSQL 中的generate_series

windows - 如何获取连接到 PostgreSQL 服务器的客户端机器名称/IP 地址

nhibernate - 处理NHibernate异常

mysql - 如何在 MySQL 数据库中生成一堆假用户

sql - 在 SQL Server 2014 中写入基础表后立即查询 View

sql - 如何删除FK和所有从属表条目?

Postgresql:查找散列索引

sql - 删除唯一约束不起作用

oracle - 插入期间违反唯一约束:为什么? (甲骨文)