【发布时间】:2010-10-23 06:51:25
【问题描述】:
我想在 SQL 表中为我的用户名 varchar 添加一些约束,以便如果用户名存在,则无法创建不同情况下的重复用户名。我怎样才能做到这一点?谢谢
编辑:
我正在使用 PostgreSQL,非常感谢您提供一些语法帮助。
【问题讨论】:
标签: postgresql collation case-insensitive
我想在 SQL 表中为我的用户名 varchar 添加一些约束,以便如果用户名存在,则无法创建不同情况下的重复用户名。我怎样才能做到这一点?谢谢
编辑:
我正在使用 PostgreSQL,非常感谢您提供一些语法帮助。
【问题讨论】:
标签: postgresql collation case-insensitive
如果尚未填充表,您可以考虑在进行任何插入之前简单地转换为标准的大写或小写,并使该字段成为主键(或仅具有唯一约束)。如果用户想在他指定的情况下查看他的用户 ID,这可能是数据库中的另一列。
更新:基于更新的标签,我仍然建议我提出的解决方案较少依赖特定的 DBMS。
【讨论】:
来自docs
CREATE UNIQUE INDEX lower_title_idx ON films ((lower(title)));
【讨论】:
ALTER TABLE films ADD CONSTRAINT unique_file_title UNIQUE USING INDEX lower_title_idx; 但出现错误Cannot create a primary key or unique constraint using such an index. Index contains expressions. 我尝试插入不区分大小写的数据,即使没有约束它似乎也能工作。
请注意,PostgreSQL 8.4(目前为测试版)将有一个case-insensitive text type。
【讨论】:
CREATE EXTENSION citext; 语句