注册
Oracle迁移达梦主键违反唯一约束
培训园地/ 文章详情 /

Oracle迁移达梦主键违反唯一约束

爱纠结的不纠结 2025/09/02 163 0 0

问题:Oracle主键正常,迁移达梦后报“违反唯一性约束”
原因:达梦数据库BLANK_PAD_MODE参数值设置为0,字符串比较时将不严格区分结尾空格, 认为'abc'='abc ',导致唯一性约束条件不满足
解决:建库时设置BLANK_PAD_MODE参数值为1。(通过更改SPACE_COMPARE_MODE参数值可以设置查询时是否比较空格后缀,但无法解决添加主键时的唯一性检查)

参数详解:
BLANK_PAD_MODE :空格填充模式参数。设置字符串比较时,结尾空格填充模式是否兼容 ORACLE。1:兼容;0:不兼容。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改。
PACE_COMPARE_MODE:是否在查询语句中比较字符串后缀空格。0:维持原有策略;1:进行比较。静态参数,缺省值为0。

案例演示:
创建测试表
CREATE SCHEMA test AUTHORIZATION SYSDBA;
create table test.test (id NUMBER not null,name VARCHAR(10) not null);
insert into test.test values ('1','abc');
insert into test.test values ('1',' abc');
insert into test.test values ('1','abc ');
insert into test.test values ('1','a bc');
案例一:BLANK_PAD_MODE=0,SPACE_COMPARE_MODE=0时,group by严格比较尾部空格,其余不比较
image.png
案例二:BLANK_PAD_MODE=0,SPACE_COMPARE_MODE=1时,group by、count严格比较尾部空格,主键不比较
image.png
案例三、BLANK_PAD_MODE=1,SPACE_COMPARE_MODE=0时,所有操作严格比较尾部空格
image.png
结论:group by在任何时候都严格比较尾部空格,主键会忽略比较尾部空格,除非设置空格填充模式为兼容,SPACE_COMPARE_MODE只能更改查询类空格比较

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服