当前位置: 首页 > article >正文

MySQL 数据库迁移至达梦 DM8 常见问题

目录

如何让迁移到 DM 的表名大小写和 MySQL 保持一致

MySQL 迁移到 DM 报错:列[NAMES]长度超出定义

MySQL 迁移到 DM 报错:记录超长

索引错误

DM大小写敏感配置

表空间

新建用户

用户与模式的关系

省略模式名的优势

实际操作


如何让迁移到 DM 的表名大小写和 MySQL 保持一致

【问题描述】

从 MySQL 迁移到 DM 数据库后,表名都变成大写了,怎么能保持表名和 MySQL 中的大小写一致?

【解决方法】

如果达梦数据库初始化的时候设置的是大小写敏感就会自动转大写,如果想保持小写,可以在迁移过程中勾选“保持对象名大小写”

MySQL 迁移到 DM 报错:列[NAMES]长度超出定义

【问题解决】

经排查,该表的 NAMES 字段存放的是中文,UTF8 编码。
报错原因:MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。若是 gb18030 字符集,varchar(2) 才可以存一个汉字;若是 UTF-8 字符集,varchar(3) 才可以存一个汉字。该 NAMES 在 MYSQL 的长度为 10,在迁移过程中,达梦数据库建表的 NAMES 字段长度也是 10,那么就会导致当该字段中文字符超过 4 个的时候,就会出现无法存下的问题。

【解决方法】
在此种情况下,为了保证汉字可以完整的被存储,可通过如下方法解决:
在迁移过程中,设置字符长度为“4”

MySQL 迁移到 DM 报错:记录超长

问题分析】MySQL 中的varchar长度超过了DM 支持的最长长度(DM最长为8188)。

【问题解决】在DM管理工具中,将错误的表启用超长记录。再重新执行错误失败任务。

索引错误

在迁移过程中出现了索引错误,经过检查后发现索引已成功建立。这可能是迁移工具引发的误报,可以忽略这个问题。

DM大小写敏感配置

DM数据库默认大小写敏感,如需设置大小写不敏感,需要在初始化数据库时,配置CASE_SENSITIVE=0 ,Docker compose部署可参考如下配置:

version: '3'
services:
  dm8:
    image: xxx(填写你自己的镜像地址)/dm8:20240715
    container_name: dm8
    restart: always
    privileged: true
    environment:
      CASE_SENSITIVE: 0       # 是否区分大小写,0 表示不区分,1 表示区分
      LD_LIBRARY_PATH: /opt/dmdbms/bin
      PAGE_SIZE: 16
      EXTENT_SIZE: 32
      LOG_SIZE: 1024
      UNICODE_FLAG: 1
      INSTANCE_NAME: dm8_test
    ports:
      - "30236:5236"
    volumes:
      - ./conf/dm.ini:/opt/dmdbms/conf/dm.ini
      - ./data:/opt/dmdbms/data

表空间

在达梦 DM8 数据库中,表空间的作用主要体现在以下几个方面:

  1. 数据存储的灵活性: 表空间允许将不同的数据对象存储在不同的表空间中,使得数据组织和管理更加灵活。例如,你可以为不同的业务模块或表分配独立的表空间,从而更好地控制数据存储的性能和空间。

  2. 性能优化: 通过将大型表或常用索引放置在独立的表空间中,可以优化数据访问性能。达梦 DM8 允许指定不同的存储设备和文件路径,以便更合理地分配存储资源,减少 I/O 瓶颈。

  3. 数据备份与恢复: 表空间使数据库的备份和恢复更加灵活。可以单独备份或恢复某个表空间,而不影响其他表空间中的数据,这在数据恢复时尤其有用,能够显著缩短恢复时间。

在迁移 MySQL 数据库至达梦 DM8 的过程中,合理配置表空间有助于提高数据管理的效率,并为系统的性能优化提供了更多的选择。因此,建议在迁移前规划好表空间的分布,并根据业务需求配置相应的表空间。

新建表空间

新建用户

在达梦 DM8 数据库中,用户与模式的关系密切,每个用户都有一个与之同名的模式。这一设计不仅有助于组织和管理数据库对象,还使得在进行 SQL 查询时可以省略模式名,从而提高了代码的可读性和兼容性。

用户与模式的关系

  1. 用户(User)

    • 每个用户在数据库中是一个独立的身份,用于身份验证和权限管理。
    • 用户可以在其模式下创建和管理数据库对象,例如表、视图和索引。
  2. 模式(Schema)

    • 每个用户自动创建一个同名的模式,这个模式用来组织用户创建的数据库对象。
    • 模式作为数据库对象的逻辑集合,确保同名对象不会发生冲突。

省略模式名的优势

  1. 简化 SQL 语句

    当用户与模式同名时,在进行 SQL 查询时可以省略模式名。例如,在 test_user 用户下创建了一个表 orders,可以直接使用:
    • SELECT * FROM orders; -- 省略模式名
  2. 兼容现有代码

    • 很多后端代码(尤其是旧代码)通常不带数据库名或模式名前缀。省略模式名的做法能够减少在迁移过程中的代码修改,提高兼容性,避免引入不必要的错误。
  3. 提高可读性

    • 省略模式名使得 SQL 语句更加简洁和清晰,特别是在复杂查询中,简化了表名的引用,增强了代码的可读性。

实际操作

用户表空间设置

所属角色


http://www.kler.cn/news/362181.html

相关文章:

  • Nginx超简洁知识:负载均衡-反向代理,动静分离,配置文件
  • 超详细的 Stable Diffusion Webui入门教程(二)基础操作
  • Node.js初学者指南:搭建HTTP服务器、获取请求信息及响应、变量声明与NPM包管理
  • 09 实战:PSNR值及其与原始图像对比系统
  • python-django-mysql原生sql增删改查搭建搭建web项目
  • 机器学习5
  • Jmeter监控服务器性能
  • React源码03 - React 中的更新
  • grafana 配置prometheus
  • 界面控件DevExtreme中文教程 - 如何与Amazon S3和Azure Blob存储集成?
  • Spring XML配置方式和Spring Boot注解方式的详细对照关系
  • Docker-Consul概述以及集群环境搭建
  • GMT绘图笔记:高亮特定的研究区域
  • 【消息队列】RabbitMQ实现消费者组机制
  • 计算机毕业设计 基于Python的校园个人闲置物品换购平台的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
  • Java中的Vector,看着陌生?
  • API接口测试与优化:确保应用稳定性的必要步骤
  • Python 深度Q网络(DQN)算法详解与应用案例
  • 计算机网络考研笔记
  • 力扣题51~70
  • 动手学深度学习9.7. 序列到序列学习(seq2seq)-笔记练习(PyTorch)
  • 如何在verilog设计的磁盘阵列控制器中实现不同RAID级别(如RAID 0、RAID 1等)的切换?
  • 集成必看!Air780E开发板集成EC11旋转编码器的可靠解决方案~
  • 二、Linux 系统命令
  • c++ 对象作用域
  • 代码随想录算法训练营第十九天|Day19二叉树