[DM8] 达梦8配置兼容Oracle

查看版本信息

select *,id_code from v$version;

查询解释: DM Database Server 64 V8 1-1-190-21.03.12-136419-ENT 64 版本位数标识,64表示为64位版本,无64则表示为32位版本 V8 大版本号,目前主要是V7、V8 1-1-190 小版本号,表示8.1.1.190 ENT 版本标识, ENT表示企业版,还有STD标准版,SEC安全版,(其他标识为非通用的定制版)

查看基础信息

-- 1.字符集;UTF-8;安装选项
SELECT '字符集',DECODE(UNICODE,'0','0-GB18030','1','UTF-8','2','EUC-KR') union
-- 2.大小写敏感;Y-敏感;安装选项
SELECT '大小写敏感',DECODE(SF_GET_CASE_SENSITIVE_FLAG,'0','N-不敏感','1','Y-敏感') union
-- 3.char是否以字符为单位;0-否;安装选项
SELECT 'char是否以字符为单位',DECODE(PARA_VALUE,0,'0-否',1,'1-是') FROM V$DM_INI WHERE "V$DM_INI".PARA_NAME='LENGTH_IN_CHAR' union
-- 4.页大小,DM建议32K;32KB;安装选项
select '页大小',page()/1024||'KB' union
-- 5. 兼容性;2-Oracle;执行如下语句修改:SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',2);若特殊参数显示NULL,重启解决
select '数据库兼容',DECODE(PARA_VALUE,0,'不兼容',1,'1-SQL92',2,'2-Oracle',3,'3-MSSQLServer',4,'4-MySQL',5,'5-DM6',6,'6-Teradata') from v$dm_ini where para_name='COMPATIBLE_MODE' union
-- 6.其他,关键字,特殊参数;;随兼容性变化
select '关键字过滤',PARA_VALUE from v$dm_ini where para_name='EXCLUDE_RESERVED_WORDS' union
--7. 空格填充,Oracle兼容必选1;1;安装选项
select '空格填充',PARA_VALUE from v$dm_ini where para_name LIKE '%BLANK_PAD_MODE%';

参数详解

BLANK_PAD_MODE参数说明

设置字符串比较时,结尾空格填充模式是否兼容 ORACLE。 取值: 1 兼容; 0 不兼容。默认为 0。可选参数。修改参数需重装库

LENGTH_IN_CHAR参数说明

参数初始化后不可以修改,如需修改,请重新初始化。

VARCHAR 类型对象的长度是否以字符为单位。取值:1、Y 表示是,0、N 表示否。默认值为 0。可选参数。

1 或 Y:是,所有 VARCHAR 类型对象的长度以字符为单位。这种情况下,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况(超过的时候往往是因为有数字或是英文字符占位较少造成的),这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为 8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;

0 或 N:否,所有 VARCHAR 类型对象的长度以字节为单位。

数据库中设定LENGTH_IN_CHAR为1或Y时,字段长度没有超过8188时,其实际的占用的字节长度根据ASCII字符+CHARSET/UNICODE_FLAG参数定义的字符集单字符的宽度*该种字符数。

COMPATIBLE_MODE参数说明

--达梦数据库设置NULL与空串等价

达梦数据库默认NULL与空字符串不等价,而Oracle是默认NULL与空串等价的,当代码里以某个值为空来进行查询时,有可能判断的条件是NULL或空串,本来NULL与空串都算空但最后查出两种情况(如NULL不能把空串查询出来,空串不能把NULL查出来)

解决方法

1.查询条件把NULL及""都加上中间用||连接

2.直接改达梦数据库的配置

修改dm.ini 文件 COMPATIBLE_MODE = 2 ,重启服务即可

或者执行

SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',2);

注意事项

SP_SET_PARA_VALUE(scope,para_name,para_value);

scope:表示范围,有两个取值,1表示动态参数,2表示静态参数;(由上面可知数据库兼容模式是静态参数);

para_name:表示要修改的参数名称;

para_value:表示要修改的值;

猜你喜欢

转载自blog.csdn.net/qq_39194322/article/details/135458629