为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:8 【操作系统】:win10 【CPU】:x86 【问题描述】*:select * from PERSON.ADDRESS where ADDRESS1 = ADDRESS2,address为varchar字段,其中一个值为123,一个值为后缀带空格的123 ,判断为相等
达梦字符串比较默认忽略末尾的空格,有如下两种处理方法: 1.初始化实例设置BLANK_PAD_MODE 改参数表示设置字符串比较时,结尾空格填充模式是否兼容ORACLE。取值:1 兼容;0 不兼容。 默认为 0。 此参数初始化后不可修改
例如建库 [dmdba@HX01 bin]$ ./dminit db_name=TEST1 instance_name=TEST1 path=/dmdata BLANK_PAD_MODE=1
create table bland_pad_mode_t (c1 int,c2 varchar2(100));
insert into bland_pad_mode_t values(1,'A'); insert into bland_pad_mode_t values(1,'A ');--一个空格 insert into bland_pad_mode_t values(1,'A ');--两个空格 commit;
select * from bland_pad_mode_t where c2='A';
可以看到严格区分了末尾空格
2.设置SPACE_COMPARE_MODE为1 该参数表示是否在查询语句中比较字符串后缀空格。0:维持原有策略;1:进行比较
修改参数 SP_SET_PARA_VALUE (2,'SPACE_COMPARE_MODE',1); 该参数为静态参数,修改后需要重启数据生效。 修改后,查询严格区分末尾空格
select * from bland_pad_mode_t where c2='A '; 可以看到已经区分末尾的空格。
也就是说在BLANK_PAD_MODE为0时,提供了SPACE_COMPARE_MODE参数来控制是否严格区分字符末尾空格。在已经初始化的实例,可以通过该参数修改。 在BLAND_PAD_MODE为1时,已经严格区分字符末尾空格,此时SPACE_COMPARE_MODE不起作用。
达梦字符串比较默认忽略末尾的空格,有如下两种处理方法:
1.初始化实例设置BLANK_PAD_MODE
改参数表示设置字符串比较时,结尾空格填充模式是否兼容ORACLE。取值:1 兼容;0 不兼容。
默认为 0。
此参数初始化后不可修改
例如建库
[dmdba@HX01 bin]$ ./dminit db_name=TEST1 instance_name=TEST1 path=/dmdata BLANK_PAD_MODE=1
create table bland_pad_mode_t (c1 int,c2 varchar2(100));
insert into bland_pad_mode_t values(1,'A');
insert into bland_pad_mode_t values(1,'A ');--一个空格
insert into bland_pad_mode_t values(1,'A ');--两个空格
commit;
select * from bland_pad_mode_t where c2='A';

可以看到严格区分了末尾空格
2.设置SPACE_COMPARE_MODE为1
该参数表示是否在查询语句中比较字符串后缀空格。0:维持原有策略;1:进行比较
修改参数
SP_SET_PARA_VALUE (2,'SPACE_COMPARE_MODE',1);
该参数为静态参数,修改后需要重启数据生效。
修改后,查询严格区分末尾空格
select * from bland_pad_mode_t where c2='A';

select * from bland_pad_mode_t where c2='A ';

可以看到已经区分末尾的空格。
也就是说在BLANK_PAD_MODE为0时,提供了SPACE_COMPARE_MODE参数来控制是否严格区分字符末尾空格。在已经初始化的实例,可以通过该参数修改。
在BLAND_PAD_MODE为1时,已经严格区分字符末尾空格,此时SPACE_COMPARE_MODE不起作用。