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 区分大小写。所以,TV
与 Tv
不同。如果约束被实现为:
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_COMP 和 NLS_SORT
select * from NLS_INSTANCE_PARAMETERS where parameter in ('NLS_SORT','NLS_COMP');
【讨论】:
以上是关于oracle - 唯一约束 ORA-00001 与区分大小写的记录的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate 两次将数据插入到 Join Table 中,导致 Spring Boot 项目中出现“ORA-00001:违反唯一约束”