达梦数据库(一)mysql2dm

news2024/12/23 19:16:22

达梦数据库(一)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进行最外层封装的地方,可以采用覆盖对应类的方式解决这个问题)

方法二(最笨)

原语句:

select
        a.DEPARTMENT_ID as 部门编号,
        sum(SALARY)     as 部门工资,
        DEPARTMENT_NAME as 部门名称
from
        TEST.EMPLOYEE a,TEST.DEPARTMENT b
where   a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by
        a.DEPARTMENT_ID
having  sum(SALARY) > 80000
ORDER BY
        a.DEPARTMENT_ID;

现语句:

select
        a.DEPARTMENT_ID as 部门编号,
        sum(SALARY)     as 部门工资,
        DEPARTMENT_NAME as 部门名称
from
        TEST.EMPLOYEE a,TEST.DEPARTMENT b
where   a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by
        a.DEPARTMENT_ID,DEPARTMENT_NAME
having  sum(SALARY) > 80000
ORDER BY
        a.DEPARTMENT_ID;

添加了:

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

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

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

多表联查更新

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

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

五、参考

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

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

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

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

相关文章

【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini

性价比最高的小模型 北京时间7月19日凌晨,美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”,即GPT-4o的更小参数量、简化版本。OpenAI表示,GPT-4o mini是目前功能最强大、性价比最高的小参数模型,性能逼近原版GPT-4&#xff0…

python--实验15 数据分析与可视化

目录 知识点 1 数据分析概述 1.1流程 1.2定义 1.3数据分析常用工具 2 科学计算 2.1numpy 2.1.1定义 2.1.2创建数组的方式 2.1.3np.random的随机数函数 3 数据可视化 3.1定义 3.2基本思想 3.3Matplotlib库 3.3.1模块 4 数据分析 4.1Pandas 4.2数据结构 4.3基…

RE学习7.16-17

[HDCTF 2023]买了些什么呢 是一个经典的算法题吧 物品的重量和价值为: | 物品编号 | 重量 | 价值 | | 1 | 2 | 8 | | 2 | 5 | 1 | | 3 | 10 | 5 | | 4 | 9 | 9 | | 5 | 3 | 5 | | 6 | 6 | 6 | | 7 | 2 | 8 | | 8 | 2 | 2 | | 9 | 6 | 3 | | 10 | 8 | 7 | | 11 | 2 | 5 | | 1…

在 PostgreSQL 中怎样进行数据库的容量规划?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 中怎样进行数据库的容量规划?一、为什么容量规划如此重要?二、影…

探索 JavaScript Polyfill:跨越浏览器兼容性的桥梁

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【构建高效Node.js中间层:探索请求合并转发的艺术】 🎠 系列专栏:【面试题-八股系列】 💖 感谢大家点赞👍收藏⭐评…

【Linux系统化学习】数据链路层

目录 数据链路层解决的问题 以太网 认识局域网 以太网帧格式 两个问题 认识MAC地址 认识MTU ARP协议 ARP协议的作用 ARP数据报格式 ARP协议的工作流程 数据链路层解决的问题 对于TCP/IP四层协议来说,数据链路层才是真正从传送数据进行跑腿办事情的&…

display: flex 和 justify-content: center 强大居中

你还在为居中而烦恼吗,水平居中多个元素、创建响应式布局、垂直和水平同时居中内容。它,display: flex 和 justify-content: center 都可以完成! display: flex:将元素定义为flex容器 justify-content:定义项目在主轴…

分享:咕嘎批量查找文件移动存储系统,一次性查找多个PDF文件,如何根据txt文本列出的文件名批量查找指定文件夹里的文件,并复制到新的文件夹,不需要写任何代码,点点鼠标批量处理一次性搞定

简介: 该文介绍了一个批量查找PDF文件(不限于找PDF)的工具,用于在多级文件夹中快速查找并复制特定文件。用户可以加载PDF库,输入文件名列表,设置操作参数(如保存路径、复制或删除)及…

一个非常好的美图展示网站整站打包源码,集成了wordpress和开源版ripro主题,可以完美运营。

一个非常好的美图展示网站整站打包源码,集成了wordpress和开源版ripro主题,可以完美运营。 自带了5个多g的美图资源,让网站内容看起来非常大气丰富,可以快速投入运营。 这个代码包,原网站已经稳定运营多年&#xff0…

影响转化率的多元因素分析及定制开发AI智能名片S2B2C商城系统小程序的应用案例

摘要:在互联网时代,转化率是衡量营销活动成功与否的关键指标。本文首先分析了影响转化率的多种因素,包括活动页面的设计、活动的限时性、主题文案的吸引力、从众心理的运用,以及最核心的产品质量与优惠力度。接着,本文…

问题:4、商业保险与政策性保险的主要不同之处是:经营主体不同、经营目标不同、承保机制不同。 #学习方法#其他#学习方法

问题:4、商业保险与政策性保险的主要不同之处是:经营主体不同、经营目标不同、承保机制不同。 参考答案如图所示

SQL Server 使用 OPTION (RECOMPILE) 和查询存储的查询

设置 我们正在使用 WideWorldImporters 数据库,您可以从 Github 下载【sql-server-samples/samples/databases/wide-world-importers at master microsoft/sql-server-samples GitHub】。我正在运行SQL Server 2017 的最新 CU【https://sqlserverbuilds.b…

Adobe国际认证详解-网页设计认证专家行业应用场景解析

在当今数字化时代,网页设计已成为各行各业不可或缺的一环。而网页设计认证专家,作为经过Adobe国际认证体系严格考核的专业人才,正逐渐成为行业内炙手可热的存在。他们凭借深厚的网页设计理论基础和实践经验,为各行各业提供了高质量…

建筑工程企业项目管理系统哪个好?试试企智汇工程项目管理系统

在建筑工程行业中,项目管理的复杂性和挑战性是众所周知的。随着项目规模的扩大和技术的不断进步,传统的管理方法已经难以满足现代建筑工程的需求。企智汇工程项目管理系统应运而生,为建筑工程企业提供了一个全面、智能、高效的解决方案。 一…

“生日悖论”简析——公式计算、代码模拟

“生日悖论”共享生日概率,通项公式计算,代码模拟计算。 (笔记模板由python脚本于2024年07月17日 18:16:40创建,本篇笔记适合会基础编程的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free&…

Flutter Dart Macro 宏简化 JSON 序列化

Flutter Dart Macro 宏简化 JSON 序列化 视频 https://youtu.be/gBZYjBmoOcU https://www.bilibili.com/video/BV1tT421a7ev/ 前言 原文 https://ducafecat.com/blog/using-dart-macros-to-simplify-json-serialization 今天我们将会体验 dart 语言新特性 macro 宏&#xff…

Vue3中实现自然滚动表格列表,可调整滚动快慢

实现效果如图所示,可以调整滚动的快慢,可以实现内容高度不够的时候停止滚动的效果。 1.实现原理: 创建一个dom为ul,赋值为当前列表数据,然后拷贝这个dom赋值给第二个ul,然后判断屏幕高度跟滚动高度对比&a…

第三届智能机械与人机交互技术学术会议(IHCIT 2024)

【北航主办丨本届SPIE独立出版丨已确认ISSN号】 第三届智能机械与人机交互技术学术会议(IHCIT 2024) 2024 3rd International Conference on Intelligent Mechanical and Human-Computer Interaction Technology 2024年7月27日----中国杭州&#xff0…

Redis深度解析:从基础到高级特性,剖析关键技术

一、关于Redis Redis介绍 REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSIC 语言编写、遵守 BSD(开源协议) 协议、支持网络、可基于内存…

Linux云计算 |【第一阶段】ENGINEER-DAY5

主要内容: SELinux、系统故障修复、HTTPD/FTP服务搭建、防火墙策略管理、服务管理 一、SELinux安全制度 SELinux(Security-Enhanced Linux),美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系&…