MySQL和DB2在SQL语法上存在一些显著差异,主要体现在函数、数据类型、分页机制等方面。以下是主要区别的对比分析:
一、日期时间函数
- MySQL
- 当前时间:
NOW() - 日期格式化:
DATE_FORMAT(NOW(), '%Y-%m-%d')
- 当前时间:
- DB2
- 当前时间:
CURRENT TIMESTAMP - 日期格式化:
TO_CHAR(CURRENT TIMESTAMP, 'YYYY-MM-DD')
- 当前时间:
二、分页查询
-
MySQL
使用LIMIT和OFFSET:sqlSELECT * FROM table LIMIT 10 OFFSET 20; -
DB2
使用FETCH FIRST和OFFSET:sqlSELECT * FROM table OFFSET 20 ROWS FETCH FIRST 10 ROWS ONLY;
三、字符串拼接
-
MySQL
CONCAT(str1, str2)
sqlSELECT CONCAT('Hello', 'World'); -
DB2
- 使用
||操作符:
sqlSELECT 'Hello' || 'World'; - 使用
四、数据类型差异
| 类型 | MySQL | DB2 |
|---|---|---|
| 整数 | INT |
INTEGER |
| 高精度小数 | DECIMAL(10,2) |
DECIMAL(10,2) |
| 备注 | 允许省略精度 | 必须显式指定精度 |
五、自增列实现
-
MySQL
sqlCREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY); -
DB2
需显式定义序列和触发器:sqlCREATE SEQUENCE seq; CREATE TABLE t (id INT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY);
六、正则表达式
-
MySQL
REGEXP操作符:sqlSELECT * FROM table WHERE name REGEXP '^A'; -
DB2
使用LIKE或REGEXP_LIKE(需特定版本):sqlSELECT * FROM table WHERE REGEXP_LIKE(name, '^A');
七、系统函数对比
| 功能 | MySQL | DB2 |
|---|---|---|
| 当前数据库 | DATABASE() |
CURRENT SCHEMA |
| 条件表达式 | IF(cond, true, false) |
CASE WHEN cond THEN true ELSE false END |
八、DDL 差异
-
MySQL 支持隐式创建索引:
sqlCREATE TABLE t (id INT PRIMARY KEY); -- 自动创建主键索引 -
DB2 需显式定义:
sqlCREATE TABLE t (id INT NOT NULL PRIMARY KEY); CREATE INDEX idx_id ON t(id);
九、权限管理
-
MySQL :
sqlGRANT SELECT ON db.* TO user; -
DB2 :
sqlGRANT SELECT ON TABLE db.table TO USER user;
总结
| 特性 | MySQL | DB2 |
|---|---|---|
| 分页 | LIMIT/OFFSET |
FETCH FIRST/OFFSET |
| 字符串拼接 | CONCAT() |
` |
| 日期函数 | NOW(), DATE_FORMAT() |
CURRENT TIMESTAMP, TO_CHAR() |
| 正则匹配 | REGEXP |
REGEXP_LIKE (高版本) |
| 自增列 | AUTO_INCREMENT |
GENERATED BY DEFAULT AS IDENTITY |
实际开发中需注意具体版本差异(如DB2的LUW vs z/OS),建议通过官方文档或兼容层(如ODBC)减少迁移成本。