MySQL 与达梦(DM)常用语法区别
一、数据类型差异
| 场景 | MySQL 常用类型 | 达梦(DM)常用类型 | 说明 | 
|---|---|---|---|
| 整数类型 | TINYINT、SMALLINT、INT、BIGINT | TINYINT、SMALLINT、INT、BIGINT | 基础类型一致,达梦对长度支持更灵活 | 
| 字符串类型 | VARCHAR、TEXT、CHAR | VARCHAR、TEXT、CHAR、VARCHAR2 | 达梦支持 VARCHAR2(兼容 Oracle) | 
| 日期时间类型 | DATETIME、TIMESTAMP | DATE、TIMESTAMP | 达梦 DATE 含时分秒,MySQL DATE 仅日期 | 
| 大字段类型 | LONGBLOB、LONGTEXT | BLOB、CLOB | 达梦用 CLOB 存字符大对象 | 
二、DDL 语句区别
1. 创建数据库
- 
MySQL: CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 
达梦: CREATE DATABASE db_name CHARACTER SET UTF8; -- 字符集配置逻辑不同
2. 创建表(自增主键)
- 
MySQL: CREATE TABLE test ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) );
- 
达梦: -- 方式1:序列+触发器(传统方式) CREATE TABLE test ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE SEQUENCE seq_test_id START WITH 1 INCREMENT BY 1; -- 方式2:IDENTITY自增列(兼容MySQL) CREATE TABLE test ( id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(50) );
3. 索引操作
- 
唯一索引(语法一致): -- MySQL 与达梦通用 CREATE UNIQUE INDEX idx_name ON test(name);
- 
达梦特有(函数索引): CREATE INDEX idx_upper_name ON test(UPPER(name)); -- 支持基于函数的索引
三、DML 语句区别
1. 批量插入
- 
MySQL:支持多组 VALUES INSERT INTO test(name) VALUES('a'), ('b'), ('c');
- 
达梦(低版本):需用 UNION ALL INSERT INTO test(name) SELECT 'a' FROM DUAL UNION ALL SELECT 'b' FROM DUAL UNION ALL SELECT 'c' FROM DUAL;
2. 限制更新/删除行数
- 
MySQL:支持 LIMIT UPDATE test SET name='d' WHERE id < 10 LIMIT 5; DELETE FROM test WHERE id < 10 LIMIT 5;
- 
达梦:需用子查询 UPDATE test SET name='d' WHERE id IN ( SELECT id FROM test WHERE id < 10 FETCH FIRST 5 ROWS ONLY );
四、查询语句区别
1. 分页查询
- 
MySQL:使用 LIMIT SELECT * FROM test ORDER BY id LIMIT 10, 20; -- 从第10行起取20行
- 
达梦:使用 FETCH FIRST SELECT * FROM test ORDER BY id OFFSET 10 ROWS FETCH FIRST 20 ROWS ONLY;
2. 字符串拼接
- 
MySQL:用 CONCAT() SELECT CONCAT(name, '_', id) FROM test;
- 
达梦:支持 || 运算符 SELECT name || '_' || id FROM test;
3. 日期函数
| 功能 | MySQL 语法 | 达梦语法 | 
|---|---|---|
| 获取当前时间 | NOW() / CURRENT_TIMESTAMP() | SYSDATE / CURRENT_TIMESTAMP | 
| 日期格式化 | DATE_FORMAT(NOW(), '%Y-%m-%d') | TO_CHAR(SYSDATE, 'YYYY-MM-DD') | 
五、其他常用区别
| 场景 | MySQL 特性 | 达梦特性 | 
|---|---|---|
| 注释符 | 支持 #、-- 、/* */ | 支持 -- 、/* */(不支持 #) | 
| 事务提交方式 | 默认自动提交 | 默认手动提交 | 
| 空值处理 | '' 与 NULL 不同 | '' 与 NULL 等价 | 
| 存储过程变量声明 | DECLARE var INT; | 语法一致,支持更多类型 | 
六、迁移注意事项
- 达梦可通过 COMPATIBLE_MODE=4配置模拟 MySQL 行为,减少适配成本
- 自增列、分页逻辑、日期函数是迁移的核心差异点
- 达梦更兼容 Oracle 语法,序列、触发器等用法与 Oracle 类似
以上内容涵盖日常开发中最常见的语法差异,迁移时建议结合具体版本的官方文档验证。
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号