参数介绍

之前从oracle11G迁移到达梦8,在Oracle没问题的数据,导入到达梦8中发现一直抛错,提示主键有冲突数据,发现是BLANK_PAD_MODE参数设置为0导致的.下面会初始化两个库通过实例演示一下该参数的影响
BLANK_PAD_MODE是初始化数据库时一个参数,数据库创建后不能修改,达梦官方文档中的解释为:
设置字符串比较时, 结尾空格填充模式是否兼容 ORACLE。 取值: 1 兼容; 0 不兼容。默认为 0。可选参数。

测试步骤

初始化测试环境

./dminit path=/dmdata blank_pad_mode=0 db_name=blank0 instance_name=blank0 port_num=6000
./dminit path=/dmdata blank_pad_mode=1 db_name=blank1 instance_name=blank1 port_num=6001
第一个库blank_pad_mode=0 存储在/dmdata/blank0下,数据库端口为6000
第二个库blank_pad_mode=1 存储在/dmdata/blank1下,数据库端口为6001

[dmdba@czw bin]$ ./dminit path=/dmdata blank_pad_mode=0 db_name=blank0 instance_name=blank0 port_num=6000
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2023-05-25
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLLlog file path: /dmdata/blank0/blank001.loglog file path: /dmdata/blank0/blank002.log
write to dir [/dmdata/blank0].
create dm database success. 2022-07-11 23:09:14
[dmdba@czw bin]$ ./dminit path=/dmdata blank_pad_mode=1 db_name=blank1 instance_name=blank1 port_num=6001
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2023-05-25
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLLlog file path: /dmdata/blank1/blank101.loglog file path: /dmdata/blank1/blank102.log
write to dir [/dmdata/blank1].
create dm database success. 2022-07-11 23:09:28

通过dm_service_installer.sh脚本创建服务,并启动数据库

[root@czw root]# pwd
/opt/dmdbms/script/root
[root@czw root]# ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/blank0/dm.ini -p blank0
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceblank0.service to /usr/lib/systemd/system/DmServiceblank0.service.
创建服务(DmServiceblank0)完成
[root@czw root]# ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/blank1/dm.ini -p blank1
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceblank1.service to /usr/lib/systemd/system/DmServiceblank1.service.
创建服务(DmServiceblank1)完成
[root@czw root]# systemctl start DmServiceblank0 DmServiceblank1

主键和唯一索引测试

BLANK_PAD_MODE=0,'a’和’a '被判断为重复数据,会抛错,-6602 违反唯一性约束

[dmdba@czw bin]$ ./disql sysdba/SYSDBA@localhost:6000服务器[localhost:6000]:处于普通打开状态
登录使用时间 : 0.923(ms)
disql V8
SQL> CREATE TABLE TEST_BLANK_PAD(COL_A VARCHAR(20) PRIMARY KEY);
操作已执行
已用时间: 4.727(毫秒). 执行号:55400.
SQL> insert into test_blank_pad
2   select 'a' from dual
3   union all
4   select 'a  ' from dual;
insert into test_blank_pad
select 'a' from dual
union all
select 'a  ' from dual;
[-6602]:违反表[TEST_BLANK_PAD]唯一性约束.
已用时间: 0.934(毫秒). 执行号:0.

BLANK_PAD_MODE=1兼容ORACLE模式下的情况下,数据可以写入

SQL> CREATE TABLE TEST_BLANK_PAD(COL_A VARCHAR(20) PRIMARY KEY);
操作已执行
已用时间: 8.251(毫秒). 执行号:55207.
SQL> insert into test_blank_pad
2   select 'a' from dual
3   union all
4   select 'a  ' from dual;
影响行数 2已用时间: 1.234(毫秒). 执行号:55208.

开窗函数

BLANK_PAD_MODE=0情况下,'语文’和’语文 ’ ,'数学’和’数学 '还是按同一个分组计算的排名

SQL> WITH T AS(SELECT '张三' AS NAME, '语文' AS COURSE, 99 AS SCOREFROM DUALUNION ALLSELECT '张三', '数学 ', 98FROM DUALUNION ALLSELECT '李四', '语文', 97FROM DUALUNION ALLSELECT '李四 ', '数学', 96FROM DUALUNION ALLSELECT '王五', '语文 ', 95FROM DUALUNION ALLSELECT '王五', '数学', 94FROM DUAL)
SELECT NAME,COURSE,SCORE,RANK() OVER(PARTITION BY COURSE ORDER BY SCORE DESC) AS RANKFROM T2;行号     NAME  COURSE SCORE       RANK
---------- ----- ------ ----------- --------------------
1          张三  数学  98          1
2          李四  数学  96          2
3          王五  数学  94          3
4          张三  语文  99          1
5          李四  语文  97          2
6          王五  语文  95          36 rows got已用时间: 2.003(毫秒). 执行号:55402.

可以看到blank_pad_mode=1兼容oracle模式下,'语文’和’语文 ’ 是分开进行了排名,语文和数学都有两个第一名

[dmdba@czw bin]$ ./disql sysdba/SYSDBA@localhost:6001服务器[localhost:6001]:处于普通打开状态
登录使用时间 : 1.529(ms)
disql V8
SQL> WITH T AS(SELECT '张三' AS NAME, '语文' AS COURSE, 99 AS SCOREFROM DUALUNION ALLSELECT '张三', '数学 ', 98FROM DUALUNION ALLSELECT '李四', '语文', 97FROM DUALUNION ALLSELECT '李四 ', '数学', 96FROM DU2   3   4   5   6   7   8   9   10  11  12  ALUNION ALLSELECT '王五', '语文 ', 95FROM DUALUNION ALLSELECT '王五', '数学', 94FROM DUAL)
SELECT NAME,COURSE,SCORE,RANK() OVER(PARTITION BY COURSE ORDER BY SCORE DESC) AS RANKFROM T;行号     NAME  COURSE SCORE       RANK
---------- ----- ------ ----------- --------------------
1          李四  数学  96          1
2          王五  数学  94          2
3          张三  数学  98          1
4          张三  语文  99          1
5          李四  语文  97          2
6          王五  语文  95          16 rows got已用时间: 15.752(毫秒). 执行号:55200.

表连接测试

BLANK_PAD_MODE=0,X和Y使用name字段内连接返回了6行结果集,相当于rtrim(x.name)=rtrim(y.name)的效果

SQL> WITH X AS(SELECT '张三' AS NAME, '语文' AS COURSE, 99 AS SCOREFROM DUALUNION ALLSELECT '张三 ', '数学 ', 98FROM DUALUNION ALLSELECT '李四', '语文', 97FROM DUALUNION ALLSELECT '李四 ', '数学', 96FROM DUALUNION ALLSELECT '王五', '语文 ', 95FROM DUALUNION ALLSELECT '王五 ', '数学', 94FROM DUAL),
Y AS(SELECT '张三' AS NAMEFROM DUALUNION ALLSELECT '李四'FROM DUALUNION ALLSELECT '王五'FROM DUAL)
SELECT * FROM X, Y WHERE X.NAME = Y.NAME;行号     NAME  COURSE SCORE       NAME
---------- ----- ------ ----------- ----
1          张三  语文  99          张三
2          张三  数学  98          张三
3          李四  语文  97          李四
4          李四  数学  96          李四
5          王五  语文  95          王五
6          王五  数学  94          王五6 rows got已用时间: 7.254(毫秒). 执行号:55403.

BLANK_PAD_MODE=1,X和Y使用内连接返回3行’李四’和’李四 '是不等的,关联不上

SQL> WITH X AS(SELECT '张三' AS NAME, '语文' AS COURSE, 99 AS SCOREFROM DUALUNION ALLSELECT '张三 ', '数学 ', 98FROM DUALUNION ALLSELECT '李四', '语文', 97FROM DUALUNION ALLSELECT '李四 ', '数学', 96FROM D2   3   4   5   6   7   8   9   10  11  12  UALUNION ALLSELECT '王五', '语文 ', 95FROM DUALUNION ALLSELECT '王五 ', '数学', 94FROM DUAL),
Y AS(SELECT '张三' AS NAMEFROM DUALUNION ALLSELECT '李四'FROM DUALUNION ALLSELECT '王五'FROM DUAL)
SELECT * FROM X, Y WHERE X.NAME = Y.NAME;行号     NAME  COURSE SCORE       NAME
---------- ----- ------ ----------- ----
1          张三 语文  99          张三
2          李四 语文  97          李四
3          王五 语文  95          王五已用时间: 1.393(毫秒). 执行号:55202.

DUAL表查询

BLANK_PAD_MODE=0的情况下,无返回

SQL> select 1 from dual where 'a' = 'a  ';
未选定行已用时间: 0.868(毫秒). 执行号:55404.

BLANK_PAD_MODE=1的情况下,有返回

SQL> select 1 from dual where 'a' = 'a  ';行号     1
---------- -----------
1          1已用时间: 0.527(毫秒). 执行号:55203.

DISTINCT GROUP BY UNION

这些平时带有去重功能的语句,在两种模式下没有区别

SQL> WITH X AS(SELECT '张三' AS NAME, '语文' AS COURSE, 99 AS SCOREFROM DUALUNION ALLSELECT '张三 ', '数学 ', 98FROM DUALUNION ALLSELECT '李四', '语文', 97FROM DUALUNION ALLSELECT '李四 ', '数学', 96FROM DUALUNION ALLSELECT '王五', '语文 ', 95FROM DUALUNION ALLSELECT '王五 ', '数学', 94FROM DUAL)
SELECT DISTINCT NAME FROM X;行号     NAME
---------- -----
1          张三
2          张三
3          李四
4          李四
5          王五
6          王五 6 rows got已用时间: 1.150(毫秒). 执行号:55204.
SQL> WITH X AS(SELECT '张三' AS NAME, '语文' AS COURSE, 99 AS SCOREFROM DUALUNION ALLSELECT '张三 ', '数学 ', 98FROM DUALUNION ALLSELECT '李四', '语文', 97FROM DUALUNION ALLSELECT '李四 ', '数学', 96FROM DUALUNION ALLSELECT '王五', '语文 ', 95FROM DUALUNION ALLSELECT '王五 ', '数学', 94FROM DUAL)
SELECT NAME, SUM(SCORE) FROM X GROUP BY NAME;行号     NAME  SUM(SCORE)
---------- ----- --------------------
1          张三  99
2          张三  98
3          李四  97
4          李四  96
5          王五  95
6          王五  946 rows got已用时间: 4.886(毫秒). 执行号:55205.
SQL> WITH X AS(SELECT '张三' AS NAME, '语文' AS COURSE, 99 AS SCOREFROM DUALUNION ALLSELECT '张三 ', '数学 ', 98FROM DUALUNION ALLSELECT '李四', '语文', 97FROM DUALUNION ALLSELECT '李四 ', '数学', 96FROM DUALUNION ALLSELECT '王五', '语文 ', 95FROM DUALUNION ALLSELECT '王五 ', '数学', 94FROM DUAL),
Y AS(SELECT '张三' AS NAMEFROM DUALUNION ALLSELECT '李四'FROM DUALUNION ALLSELECT '王五'FROM DUAL )
SELECT NAMEFROM X
UNION
SELECT NAME FROM Y;行号     NAME
---------- -----
1          张三
2          张三
3          李四
4          李四
5          王五
6          王五 6 rows got已用时间: 1.118(毫秒). 执行号:55206.

小结

BLANK_PAD_MODE=0,会忽略字符串尾部空格参与运算,distinct,group by,union操作除外

社区地址:https://eco.dameng.com

达梦8初始化参数之BLANK_PAD_MODE相关推荐

  1. 达梦数据库初始化、创建用户和修改密码

    达梦数据库初始化.创建用户和修改密码 进入数据库目录 cd /opt/dmdbms/bin/bin 初始化数据文件路径.簇大小和页大小 ./dminit path=/mnt/data EXTENT_S ...

  2. 达梦数据库初始化实例

    ** 达梦数据库初始化实例 达梦数据库产品可进入官网下载www.dameng.com 1.1图形化初始化实例 初始化实例 在tool目录下执行./dbca.sh打开初始化图形化工具 1.选择创建数据实 ...

  3. 达梦数据库初始化常用参数查询及介绍

    1字符集 字符是各种文字和符号的统称,包括各个国家文字.标点符号.表情.数字等等. 字符集 就是一系列字符的集合.字符集的种类较多,每个字符集可以表示的字符范围通常不同,就比如说有些字符集是无法表示汉 ...

  4. 达梦数据库初始化实例参数说明(页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset))

    目录 一.实例设置方法 二.各参数设置不同值的区别 1. 页大小 2. 簇大小 3. 标识符大小写敏感 4. 字符集选项 5. VARCHAR 类型长度是否以字符为单位 一.实例设置方法 达梦数据库利 ...

  5. 达梦密码策略参数PWD_POLICY详解

    查看系统管理员手册中该参数解释: PWD_POLICY 设置系统默认口令策略 默认值为2 动态,系统级参数 0:无策略 1:禁止与用户名相同 2:口令长度不小于9 4:至少包含1个大写字母(A-Z) ...

  6. 达梦数据库安装学习总结--DCA下篇

    达梦数据库DCA概述 达梦数据库是一款完全自主原创的国产数据库,国产的操作系统及国产的数据库在国内使用不断扩大,升级及发展也日新月异,其中达梦数据库在政府及事业单位就得到广泛应用. DCA课程学习使用 ...

  7. 大小写 数据库 达梦_达梦数据库,大小写敏感这个参数怎么设置

    1.1 现象描述 达梦在安装完软件后,需要初始化数据库实例(其他大部分数据库,也是同样的操作). 但是,达梦在初始化数据库实例前,有几个需要特别注意的参数,这几个参数一定要特别关注,因为如果设置错了, ...

  8. 达梦数据库——Oracle到达梦数据迁移

    ## 迁移思路 1.统计Oracle库中对象以及表数据量: 2.达梦数据库选择合适的初始化参数: BLANK_PAD_MODE 空格填充模式选1, CASE_SENSITIVE 大小写敏感:可以考虑开 ...

  9. 达梦数据库中各种表的管理

    上海蒙马软件技术有限公司 2021年7月28日 达梦数据库有:普通表.分区表.临时表.堆表(rowid).列存表(HUGE).外部表等 默认的普通表是索引组织部表(索引组织表,无主键利用 rowid, ...

  10. 达梦数据库之巡检之道

    达梦数据库安装部署上线之前对操作系统和实例初始化参数都需要进行相关配置与调整,诸多参数是达梦人经过长期积累和实践探索的宝贵知识财富,下边详细介绍相关设置和配置的原因及意义.linux全面调优请参考之前 ...

最新文章

  1. FreeRTOS(四)——内存管理
  2. C#完美任意设置webBrowser框架默认的IE内核版本
  3. ORACLE TEXT FILTER PREFERENCE(四)
  4. centos7 mysql安装与用户设置
  5. windows命令提示符下输入net start/stop mysql发生系统错误5,拒绝访问的解决方法
  6. java system.out.read_求教Java高手,关于输入流的read的问题,为什么while循环体里面的两个System.out.println没有打印出来?...
  7. Vue+Axios同步请求
  8. [TODO]Python拾遗(三)
  9. 按冯诺依曼提出的计算机类型,2011年12月24日计算机一级考试题目广西
  10. Python杂谈: __init__.py的作用
  11. Linux命令笔记(一)
  12. ubuntu配置硬盘开机自动挂载
  13. Android之提交数据到服务端方法简单封装
  14. stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)
  15. 【Emacs】Emacs for windows基本配置文件【转载】
  16. Unirech:阿里云国际版免备案虚拟主机的优点与缺点
  17. Pandas 重置索引深度总结
  18. 如何将mp4视频格式转换成mov视频
  19. ubuntu18.04查看网卡mac地址
  20. Outlook关闭时最小化到任务栏的完美解决方法

热门文章

  1. python控制多个屏幕_使用python的多个屏幕
  2. 计算机二级考试高级应用软件版本,计算机二级高级办公软件考哪个版本
  3. python高清图片合成_Python用PIL合成图片
  4. Couch的MapReduce查询
  5. 删除win10自带微软中文输入法
  6. 部署点评Cat监控项目
  7. Fantastic用法
  8. 本地Navicat连接阿里云数据库RDS for MySQL(全网最详细,没有之一!)
  9. springboot聚合工程打包报错Compilation failure浅析
  10. Linux进阶_加密和安全