根本原因
因为特殊字符存在导致的主键冲突报错
细节分析
前提
oracle中存在一张table,table中存在字段 CName(nvarchar),且该字段为唯一主键;
具体
- 现有一条数据需要入库,内容如下 '中信建投惠享债券型证券投资基金' (包含零宽空格符)直接根据这个字段值查询数据库 值是不存在的
select * from tablename where CName='中信建投惠享债券型证券投资基金'
-
查询数据库发现实际值为 '中信建投惠享债券型证券投资基金' (不包含零宽空格符) 程序判断数据不存在,但是入库时报错主键冲突
-
1 2中内容肉眼看着是相同的,实际上1的内容中包含 Unicode零宽空格字符 该字符常用编辑器查看,是不可见,但可通过编码来辨别 如下图
当然直接通过程序判断也是可以的
4.删除数据库中无特殊符号的数据,重新入库,入库正常
5.但是这里还要一个坑,虽然包含特殊符号的数据正常入库 但是使用包含特殊字符的内容直接查 数据是空的,使用无特殊字符的内容查询 就可以了
select * from tablename where CName='中信建投惠享债券型证券投资基金' (包含零宽空格符)
select * from tablename where CName='中信建投惠享债券型证券投资基金' (不包含零宽空格符)
标签:CName,--,零宽,空格符,报错,建投惠享,主键,入库
From: https://www.cnblogs.com/Alicia-meng/p/17563096.html