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

MySQL 与 DM 字段类型映射大全

达梦作为国产数据库,其数据类型与Oracle风格更接近,在与MySQL进行数据迁移、应用适配时需要特别注意类型的选择。


核心原则

  1. 精度优先:映射时优先考虑数据精度和范围,而非名称一致。

  2. 长度差异:字符串类型长度定义语义不同(MySQL是字符数,达梦默认是字节数,但可指定字符集)。

  3. 无符号处理:MySQL支持UNSIGNED,达梦没有此概念,需用更大范围的有符号类型承载。

  4. 自动递增:MySQL用AUTO_INCREMENT,达梦用IDENTITY(1,1)

  5. 布尔类型:MySQL有BOOL/TINYINT(1),达梦有BITTINYINT


数据类型映射大全

分类MySQL 数据类型达梦 (DM8) 推荐映射类型关键说明与注意事项
整数类型TINYINTTINYINT范围相同(-128 ~ 127)。MySQL的无符号TINYINT(0~255)需映射为达梦的SMALLINT
TINYINT UNSIGNEDSMALLINT
SMALLINTSMALLINT范围相同(-32768 ~ 32767)。MySQL无符号需映射为达梦INT
SMALLINT UNSIGNEDINT
MEDIUMINTINTMySQL特有类型。达梦用INT足够容纳(-8388608~8388607)。无符号需用BIGINT
MEDIUMINT UNSIGNEDBIGINT
INT/INTEGERINT范围相同。MySQL无符号需映射为达梦BIGINT
INT UNSIGNEDBIGINT
BIGINTBIGINT范围相同。MySQL无符号无完美对应类型,可考虑DECIMAL(20,0)BIGINT(需应用层确保非负)。
BIGINT UNSIGNEDDECIMAL(20,0)BIGINT+ 约束
小数/数值DECIMAL(M,D)/NUMERIC(M,D)DECIMAL(M,D)/NUMERIC(M,D)最安全映射。精度与标度定义一致。M为总位数,D为小数位。
FLOAT(M,D)FLOAT不推荐指定M,D。达梦的FLOAT是浮点数,精度行为与MySQL可能有细微差异。对于精确数值,请使用DECIMAL
DOUBLE(M,D)DOUBLE/DOUBLE PRECISION同上,不推荐指定M,D。
日期时间DATEDATE完全兼容。
TIMETIME完全兼容。
DATETIMEDATETIME注意:MySQL 5.6+的DATETIME支持毫秒(DATETIME(6)),达梦DATETIME精度到秒。如需毫秒,应使用DATETIME(6)TIMESTAMP(6)
DATETIME(fsp)DATETIME(fsp)TIMESTAMP(fsp)重点:必须指定小数秒精度(fsp),如DATETIME(3)
TIMESTAMPTIMESTAMP达梦TIMESTAMP默认带时区(但存储的是时间戳值),行为与MySQL的TIMESTAMP(自动时区转换)有本质不同。迁移时需评估业务逻辑。
TIMESTAMP(fsp)TIMESTAMP(fsp)同上,并注意精度匹配。
YEARSMALLINTMySQL特有。用2位或4位年份,达梦无直接对应,通常用SMALLINT存储4位年份。
字符串类型CHAR(N)CHAR(N)重要区别:MySQL的N是字符数,达梦默认是字节数。若使用中文字符集(如UTF8),达梦应定义为CHAR(N CHAR)
VARCHAR(N)VARCHAR2(N CHAR)最佳实践:达梦中推荐使用VARCHAR2始终使用(N CHAR)来按字符定义长度,避免乱码和截断。最大长度受页大小限制(通常支持到8188字符左右)。
TINYTEXTVARCHAR2(255 CHAR)根据实际最大长度选择合适的大小。
TEXTCLOB大文本字段。达梦的CLOB行为与MySQLTEXT类似,但函数、索引支持有差异。
MEDIUMTEXTCLOB
LONGTEXTCLOB
ENUM('v1','v2')VARCHAR2(100 CHAR)+ 检查约束MySQL特有。达梦中可用CHECK约束模拟。
SET('v1','v2')VARCHAR2(200 CHAR)或 多对多关系表MySQL特有。建议范式化或程序逻辑处理。
二进制类型BINARY(N)CHAR(N) BYTE定长二进制。
VARBINARY(N)VARBINARY(N)RAW(N)变长二进制。达梦RAW更常用。
TINYBLOBBLOB达梦的BLOB可覆盖所有MySQL的BLOB变体。
BLOBBLOB
MEDIUMBLOBBLOB
LONGBLOBBLOB
其他类型BIT(M)BITVARBIT位类型。达梦BIT是单比特,VARBIT可变长度。MySQLBIT(8)可用达梦BINARY(1)VARBIT(8)模拟。
BOOL,BOOLEANTINYINTBIT本质都是TINYINT(1)。达梦中可用TINYINT,或用BIT表示真/假。
JSONVARCHAR2(4000 CHAR)/CLOB+ 应用层解析达梦无原生JSON类型(DM8新版本已支持JSON,但语法函数不同)。通常用文本存储,或用LONGVARCHAR
GEOMETRY等空间类型无直接对应,可用BLOB/RAW存储WKB达梦对空间数据支持有限,需应用层处理。
自增列INT AUTO_INCREMENT PRIMARY KEYINT IDENTITY(1,1) PRIMARY KEY语法不同。达梦使用IDENTITY关键字。

迁移与开发建议

  1. 字符串长度定义:在达梦DDL中,对于中文字符集,务必使用VARCHAR2(50 CHAR)而非VARCHAR2(50),后者是按字节计算,容易导致字符截断。

  2. 日期时间精度:如果MySQL使用了DATETIME(3)等带精度的类型,达梦必须对应使用DATETIME(3),否则会丢失毫秒信息。

  3. TIMESTAMP 时区陷阱:这是最大的坑。MySQL的TIMESTAMP会在存取时根据会话时区转换,存储为UTC;达梦的TIMESTAMP存储的是“日期时间值”,没有自动时区转换。强烈建议

    • 如果业务不关心时区,只用本地时间,两边都用DATETIME

    • 如果需要时区支持,达梦侧需使用TIMESTAMP WITH TIME ZONE,并在应用层仔细处理。

  4. 无符号处理:在达梦侧,对原MySQL的无符号列,考虑增加CHECK(column >= 0)约束来保证数据一致性。

  5. 工具辅助:使用达梦的DTS 迁移工具可以自动完成大部分类型映射,但工具转换后必须人工核对上述关键点,尤其是字符串和日期类型。

  6. 测试验证:务必对边界值(如最大长度、日期范围、大数值)进行充分测试,确保数据存储、查询、计算的结果一致。


示例DDL对比

-- MySQL 表 CREATE TABLE user ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, age TINYINT UNSIGNED, balance DECIMAL(10,2), created_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3), description TEXT ); -- 对应的达梦表(建议) CREATE TABLE user ( id BIGINT IDENTITY(1,1) PRIMARY KEY, -- 无符号INT用BIGINT承载 name VARCHAR2(30 CHAR) NOT NULL, -- 使用CHAR语义定义长度 age SMALLINT, -- 无符号TINYINT用SMALLINT balance DECIMAL(10,2), created_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3), -- 保持精度 description CLOB );

这份映射表涵盖了绝大多数场景,实际使用时请结合达梦数据库的具体版本(如DM8)官方文档和您的业务数据特征进行最终决定。

http://www.cnnetsun.cn/news/186023.html

相关文章:

  • GetQzonehistory终极指南:一键完整备份QQ空间所有历史记录
  • CowabungaLite终极指南:解锁iOS 15+设备自定义核心功能
  • XXMI启动器:多游戏模型导入器管理工具完整指南
  • GetQzonehistory:一键导出QQ空间完整历史记录,永久保存青春回忆
  • iOS个性化定制工具箱:Cowabunga Lite深度使用指南
  • Jasminum插件:3步搞定知网文献元数据抓取的完整指南
  • 树莓派pico超详细版入门:连接电脑与文件传输
  • 组合逻辑电路设计超详细版:三态门与总线接口电路的工作机制
  • pico之版权验证不通过
  • 视频PPT提取终极指南:3分钟实现自动化课件整理
  • 解锁BAAI bge-large-zh-v1.5:中文语义检索新体验
  • 淘宝开放API批量上架商品操作指南(2025年最新版)
  • XHS-Downloader小红书数据采集终极指南:5分钟快速上手教程
  • Vue3-Element-Admin终极解决方案:企业级后台管理系统的完整框架
  • 罗技鼠标宏完整配置教程:快速掌握绝地求生压枪技巧
  • Zotero-SciPDF终极指南:一键获取学术文献PDF的完美解决方案
  • Zotero-SciPDF终极指南:一键获取学术文献PDF的完整解决方案
  • VMware macOS解锁工具终极指南:轻松打造跨平台开发环境
  • 基于Vivado2025的Verilog综合行为全面讲解
  • Hitboxer SOCD清理器:终极游戏按键冲突解决方案
  • 视频PPT智能提取:零基础快速上手完整教程
  • 图解说明常见工控设备USB串口驱动安装流程
  • VMware Unlocker工具使用指南:在Windows和Linux系统上运行macOS虚拟机
  • TranslucentTB色彩选择器深度解析:解锁Windows任务栏个性化新境界
  • iOS自定义终极指南:无需越狱打造专属iPhone体验
  • MAA智能助手:明日方舟游戏自动化管理全解析
  • TranslucentTB 完整使用教程:让 Windows 任务栏瞬间变透明的终极方案
  • Vue3-Element-Admin:5分钟搭建企业级后台系统的终极解决方案
  • Zotero插件终极指南:3步实现PDF自动下载
  • Soundflower终极指南:macOS虚拟音频设备的完整配置与实战应用