oracle - 唯一约束 ORA-00001 与区分大小写的记录

Posted

技术标签:

【中文标题】oracle - 唯一约束 ORA-00001 与区分大小写的记录【英文标题】:oracle - Unique constraints ORA-00001 vs Case Sensitive Records 【发布时间】:2014-06-26 11:39:54 【问题描述】:

我尝试插入到具有 2 列唯一约束的表中,但遇到了唯一约束错误。

选择不同的查询返回以下记录:

Record 1:
ColA:A001 ColB:TV set A001
Record 2:
ColA:A001 ColB:Tv set A001

在针对唯一约束进行验证时,oracle 是否进行区分大小写的比较?例如,在上面的场景中,我们可以看到除了 ColB (TV verus Tv) 之外的所有值都是相同的。 Distinct 表明它们是两个不同的记录,而 unique 约束似乎认为它们是相同的?

谁能帮忙澄清一下?

谢谢!

【问题讨论】:

请添加表和约束的 DDL 语句、表的当前内容以及您尝试执行的 INSERT 语句。 ***.com/questions/3944840/… 的可能副本,其答案已被接受 【参考方案1】:

默认情况下,Oracle 区分大小写。所以,TVTv 不同。如果约束被实现为:

create unique index table_colb on table(colb)

(或create table 语句中的等效项),那么两者将不同。如果您想要不区分大小写,请使用功能索引:

create unique index table_colb on table(lower(colb))

【讨论】:

【参考方案2】:

Oracle 区分大小写您可以查看 DDL SQL Fiddle Demo。

检查 NLS_COMPNLS_SORT

select * from NLS_INSTANCE_PARAMETERS where parameter in ('NLS_SORT','NLS_COMP');

【讨论】:

以上是关于oracle - 唯一约束 ORA-00001 与区分大小写的记录的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00001: 违反唯一约束条件

“ORA-00001:违反了唯一约束”,即使使用异常

ORA-00001: 违反唯一约束条件

Hibernate 两次将数据插入到 Join Table 中,导致 Spring Boot 项目中出现“ORA-00001:违反唯一约束”

ORA-00001:违反了唯一约束(MYUSER.ADI_PK)

oracle唯一约束错误信息