达梦数据库(一)mysql2dm

达梦数据库(一)mysql2dm

文章目录

    • 达梦数据库(一)mysql2dm
    • 一、安装篇ForWindows
    • 二、数据库初始化篇
    • 三、数据迁移篇
      • 出现的问题
        • 找不到对应表或者视图
      • 注意
        • 字符集
        • 模式
        • 迁移出错
        • 大小写敏感
          • 解决方案
    • 四、 代码修改篇
      • group_concat
      • GROUP BY
        • 方法一
        • 方法二(最笨)
        • 方法补充
      • 多表联查更新
        • 参考
    • 五、参考

声明:

  1. 在windows上安装达梦数据库只是临时过渡使用

  2. 如未明确声明windows版本,皆为win10系统

  3. 项目背景为mysql数据迁移至达梦数据库

  4. 下文达梦数据库版本为 8

    要问具体的小版本号?问就是不知道。。。

    sql> select * from v$version;

    在这里插入图片描述

sql> select id_code;

在这里插入图片描述

当然你可以参照官方迁移文档:https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html

一、安装篇ForWindows

  1. 下载安装包(需要登录),以下为官方系在地址。

    https://www.dameng.com/list_103.html

在这里插入图片描述

Please Note: 下载的软件安装包为压缩包,解压后如下所示,双击打开即可。

在这里插入图片描述

打开 .ios 文件后如下所示:

在这里插入图片描述

  1. 安装

    双击 setup.exe 安装即可

    (有些工具 在 /source/tool/ 也能用,但是有些不能用,建议还是安装较好)

二、数据库初始化篇

https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-migrate.html

此链接为官方教程,不做过多赘述了,只在本文档中强调踩的坑。

三、数据迁移篇

在迁移前需要做准备工作,建议仔细阅读官方迁移文档。

出现的问题

找不到对应表或者视图

项目使用SYSDBA用户登陆。发现找不到对应表或者视图。

在达梦数据库中,如果登陆的用户有多个模式的权限,那么在查询的时候需要带上模式名。即 select * from moshi.table;

当然如果你的用户只有一个模式的权限那就不需要模式名了,直接查询即可。即 select * from table;

注意

字符集

达梦数据库在创建数据库实例的时候已经选择了字符集,在这个实例中创建的所有模式都是这个字符集。按照本文档使用的DM8版本,支持的字符集是UTF-8/GB18030/EUC-KR。(已经创建的是无法修改的,此处需要注意你的源数据库字符集 如 我的是UTF-8MB4 里面可能有表情,但是目标达梦是UTF-8)

select SF_GET_UNICODE_FLAG();
select  UNICODE ();
-- 执行以上命令可以在已经实例化的达梦数据库查看当前字符集。 0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KR

please note:UTF-8MB4下的 varchar(32) 可能对应的是 128位的字节数,但是UTF-8下的只是32位(理论上只能存储10个中文字符)。迁移过程中可能会出现超长。这个时候需要在迁移时修改对应映射的达梦数据库的表的字段精度。

模式

使用DM数据迁移工具迁移后,mysql的库对应的是达梦数据库的模式。

迁移出错

在使用DM数据迁移工具时有很多选项,建议仔细看看,按需选择,比如两个库字符长度不一致时。迁移时可以选择对应的表存在时先删除再继续操作。

大小写敏感

这东西很致命。模式/表名 查询时候的大小写等息息相关。

达梦数据库在数据库实例初始化的时候有个选项是是否大小写敏感,可以执行以下sql查询

select CASE_SENSITIVE();
-- 1 就是敏感

阿明酱啊 -【达梦8】大小敏感字符集参数设置,可以看看这篇文章。

概括为:

  • 大小写不敏感的实例中

    • DDL无论大小写不允许重复

    • 无论查询条件是否存在大小写,只要存在符合的相同结果都会被检索出来。

      搜索条件为大写如 (where name = “ZHANGSAN”) 会把 ZHANGSAN,zhangsan 都查出来。

  • 在大小写敏感的实例中

    • 若建表语句中表名并没用双引号括起来,则都会被转换成大写。若表名已经被双引号括起来,则表名保留双引号中的大小写形式。

      create table TEST.AAA

      create table TEST.aaa

      这俩最终建的表名都叫 AAA

      create table TEST.“aaa” 这个表名叫 aaa

      字段名同理。

    • 若建表语句中列名并没用双引号括起来,则都会被转换成大写。若列名已经被双引号括起来,则表名保留双引号中的大小写形式,且允许存在列名相同但大小写不同的列。

    • 查询条件严格按照结果的大小写来查询数据,若结果相同但大写不同,则不会出现在查询结果中。

      查询 AAA 只会查询到 AAA 查不出 aaa

    解决方案
    1. 大小写敏感环境中 表名/列名 保持默认(即 自动转为全部大写)

      sql查询时 表名或者列名 会自动转为 大写

      参考 第二层皮是也-达梦数据库大小写敏感设置及使用初探

    2. 初始化数据库设置为大小写不敏感

    3. 修改配置文件

      参考 达梦数据库的大小写敏感与CASE_SENSITIVE详解

四、 代码修改篇

group_concat

group_concat 改为wm_concat

GROUP BY

错误提示语:第1 行附近出现错误:不是 GROUP BY 表达式

方法一

原语句:

select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;

修改后语句:

select /*+ GROUP_OPT_FLAG(1)*/ e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;

添加了

/*+ GROUP_OPT_FLAG(1)*/

但是很遗憾,因项目代码中封装了分页语句,相当于在原本执行的sql外又套了一层,导致加的这段代码被包在内部子查询内。语句不生效。(如果你能找到源码中对sql进行最外层封装的地方,可以采用覆盖对应类的方式解决这个问题)

方法二(最笨)

原语句:

selecta.DEPARTMENT_ID as 部门编号,sum(SALARY)     as 部门工资,DEPARTMENT_NAME as 部门名称
fromTEST.EMPLOYEE a,TEST.DEPARTMENT b
where   a.DEPARTMENT_ID = b.DEPARTMENT_ID
group bya.DEPARTMENT_ID
having  sum(SALARY) > 80000
ORDER BYa.DEPARTMENT_ID;

现语句:

selecta.DEPARTMENT_ID as 部门编号,sum(SALARY)     as 部门工资,DEPARTMENT_NAME as 部门名称
fromTEST.EMPLOYEE a,TEST.DEPARTMENT b
where   a.DEPARTMENT_ID = b.DEPARTMENT_ID
group bya.DEPARTMENT_ID,DEPARTMENT_NAME
having  sum(SALARY) > 80000
ORDER BYa.DEPARTMENT_ID;

添加了:

ORACLE或者DMDB库中:GROUP BY后面必须加上你SELECT后面所查询的所有除聚合函数之外的所有字段(或者再加一层嵌套),但是这种方法,如果

  • 有的sql加了 *
  • 有的sql 嵌套了字查询
方法补充

参考 https://blog.csdn.net/qq_37898570/article/details/126951104

多表联查更新

参考
  • 帅ちいさい宝 csdn 玩转达梦の 多表关联更新改写

多是针对于多表联查有且只更新一个表的数据,而非多表联查更新多个表的数据。

五、参考

达梦数据库社区-技术分享

达梦数据库社区-技术专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.17、基于竞争层的竞争学习(matlab)

1、基于竞争层的竞争学习简介及原理 竞争学习是一种无监督学习方法,其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络(Competitive Neural Network,简称CNN),其核心部分是…

Linux复习02

一、什么是操作系统 操作系统是一款做软硬件管理的软件! 一个好的操作系统,衡量的指标是:稳定、快、安全 操作系统的核心工作: 通过对下管理好软硬件资源的手段,达到对上提供良好的(稳定,快…

什么是单例模式,有哪些应用?

目录 一、定义 二、应用场景 三、6种实现方式 1、懒汉式,线程不安全。 2、懒汉式,线程安全 3、双检锁/双重校验锁(DCL,即 double-checked locking) 4、静态内部类方式-------只适用于静态域 5、饿汉式 6、枚举…

嵌入式C++、STM32、树莓派4B、OpenCV、TensorFlow/Keras深度学习:基于边缘计算的实时异常行为识别

1. 项目概述 随着物联网和人工智能技术的发展,智能家居安全系统越来越受到人们的关注。本项目旨在设计并实现一套基于边缘计算的智能家居安全系统,利用STM32微控制器和树莓派等边缘设备,实时分析摄像头数据,识别异常行为(如入侵、跌倒等),并及时发出警报,提高家庭安全性。 系…

英福康INFICON RGAs for the AMAT Endura 5500 课件PPT

英福康INFICON RGAs for the AMAT Endura 5500 课件PPT

uniapp+vue3实现音乐播放器,包含上一首、下一首、暂停、播放、下载音频、下载视频、进度条拖拽、歌词等

uni-app中实现音乐播放器 1、主要利用的是uni-app中提供的uni.createInnerAudioContext()来进行实现&#xff1b; 2、代码示例 &#xff08;1&#xff09;主页面代码展示 <template><view class"songDetailContainer"><view class"bg&quo…

记录uni-app横屏项目:自定义弹出框

目录 前言&#xff1a; 正文&#xff1a; 前言&#xff1a;横屏的尺寸问题 最近使用了uniapp写了一个横屏的微信小程序和H5的项目&#xff0c;也是本人首次写的横屏项目&#xff0c;多少是有点踩坑不太适应。。。 先说最让我一脸懵的点&#xff0c;尺寸大小&#xff0c;下面一…

vxe-弹窗初始化激活选中Vxe-Table表格中第一行input输入框

1.实现效果 2.Modal弹窗的渲染过程 一、Vue组件的生命周期 Vue组件从创建到销毁会经历一系列的生命周期钩子&#xff0c;这些钩子为开发者提供了在不同阶段插入自定义逻辑的机会。在Modal弹窗的上下文中&#xff0c;这些生命周期钩子同样适用。 beforeCreate&#xff1a;组件…

Qt中的高分辨率及缩放处理

写在前面 使用Qt开发界面客户端&#xff0c;需要考虑不同分辨率及缩放对UI界面的影响&#xff0c;否则会影响整体的交互使用。 问题 高分辨率/缩放设备上图片/图标模糊 若不考虑高分辨及缩放处理&#xff0c;在高分辨率/缩放设备上&#xff0c;软件中的图片、图标可能会出现…

解决jupyter argparse报错

jupyter argparse报错 文章目录 一、jupyter argparse报错 一、jupyter argparse报错 args parser.parse_args()这行代码改为&#xff1a; args parser.parse_args(args[])完整的代码为&#xff1a; import argparseparser argparse.ArgumentParser() parser.add_argumen…

sourcetree中常用功能使用方法及gitlab冲突解决

添加至缓存&#xff1a;等于git add 提交&#xff1a;等于git commit 拉取/获取&#xff1a;等于git pull ,在每次要新增代码或者提交代码前需要先拉取一遍服务器中最新的代码&#xff0c;防止服务器有其他人更新了代码&#xff0c;但我们自己本地的代码在我们更新前跟服务器不…

Java实战中如何使用多线程(线程池)及其为什么使用?

这个话题在入行之前就想过很多次&#xff0c;很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话&#xff0c;既没有案例也没有什么公式去证明&#xff0c;但是面试中总是被问到&#xff0c;也没有实战经历&#xff0c;所以面试时一问到多线程的东西就无…

深度学习入门——与学习相关的技巧

前言 本章将介绍神经网络的学习中的一些重要观点&#xff0c;主题涉及寻找最优权重参数的最优化方法、权重参数的初始值、超参数的设定方法等 此外&#xff0c;为了应对过拟合&#xff0c;本章还将介绍权值衰减、Dropout等正则化方法&#xff0c;并进行实现。 最后将对近年来…

细说MCU用单路DAC模块设计和输出锯齿波的实现方法

目录 一、STM32G474RE的DAC模块 二、配置 1.配置DAC 2.选择时钟源和Debug 3.配置系统时钟 三、代码修改 1.启动DAC 2.给DAC的数据输出寄存器赋值 3.运行并观察输出 一、STM32G474RE的DAC模块 有些MCU本身就带有数/模转换器(Digital to Analog Converter,DAC)模块&am…

昇思25天学习打卡营第20天|Diffusion扩散模型

Mindspore框架利用扩散模型DDPM生成高分辨率图像&#xff08;生成高保真图像项目实践&#xff09; Mindspore框架利用扩散模型DDPM生成高分辨率图像|&#xff08;一&#xff09;关于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;模型Mindspore框架利…

差分进化算法原理及其MATLAB/Python代码

1.算法简介 引用自&#xff1a;Storn R, Price K. Differential evolution–a simple and efficient heuristic for global optimization over continuous spaces[J]. Journal of global optimization, 1997, 11: 341-359. 今天给大家带来的是一个非常经典的智能优化算法–差分…

【多模态】42、LLaVA-UHD | 支持任意纵横比和大分辨率图像输入的 LLaVA

论文&#xff1a;LLaVA-UHD: an LMM Perceiving Any Aspect Ratio and High-Resolution Images 代码&#xff1a;https://github.com/thunlp/LLaVA-UHD 出处&#xff1a;清华 | 新加坡国立大学 | 中国科学院大学 一、背景 现有的很多 LMM 都是将图像处理成固定的纵横比&…

Ubuntu编译ffmpeg并添加cmake工程

文章目录 前言前提须知为什么要自己编译 FFmpeg前提软件包与工具的安装编译ffmpeg写CMakeList.txt包含ffmpeg到我们项目中 总结 前言 FFmpeg 是一个领先的多媒体框架&#xff0c;能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创造的内容。FFmpeg 包…

设计模式11-原型模式

设计模式11-原型模式 写在前面对象创建模式典型模式原型模式动机结构代码推导应用特点要点总结 原型模式与工厂方法模式对比工厂方法模式原型模式什么时候用什么模式 写在前面 对象创建模式 通过对象创建模式绕开动态内存分配来避免创建过程中所导致的耦合过紧的问题。从而支…

数学建模--国赛备赛---TOPSIS算法

目录 1.准备部分 1.1提交材料 1.2MD5码相关要求 2.TOPSIS算法 2.1算法概述 2.2基本概念 2.3算法核心思想 2.4拓展思考 3.适用赛题 3.1适用赛题说明 3.2适用赛题举例 4.赛题分析 4.1指标的分类 4.2数据预处理 4.2.1区间型属性的变换 4.2.2向量规范化 4.3数据加…