Sublime Text本身不解析SQL语法或执行数据库校验,但能高效支撑DDL脚本跨库兼容性比对与人工修正,核心是将差异显性化、支持批量操作。

直接说结论:Sublime Text 本身不解析 SQL 语法,也不执行数据库校验,但它能高效支撑 DDL 脚本的跨库兼容性比对与人工修正——前提是你要清楚目标库的语法边界,比如 MySQL 5.7 和金仓(Kingbase)的 ALTER TABLE ... ADD COLUMN FIRST 都支持,但 PostgreSQL 就不认 FIRST 关键字。
怎么用 Sublime 快速识别跨库 DDL 不兼容点
核心不是“自动转换”,而是把差异显性化、可批量操作。先从源库导出 SHOW CREATE TABLE 结果,再在 Sublime 中开两个窗口并排:左边放 MySQL 原始 DDL,右边建空文件模拟目标库(如达梦/金仓/PostgreSQL)的适配版。
- 用
Ctrl+Shift+P调出命令面板,输入 “Split View” 实现左右分屏对比 - 启用
Highlight Matches插件,高亮所有ENGINE=InnoDB、DEFAULT CHARSET=utf8mb4、AUTO_INCREMENT等 MySQL 特有子句 - 对金仓或达梦目标库,搜索
COMMENT '.*?'并确认是否保留(金仓支持,DM 早期版本需改用COMMENT ON COLUMN单独写) - 注意字段类型缩写:MySQL 的
TINYINT(1)在 PostgreSQL 必须转为BOOLEAN或SMALLINT,不能留括号
为什么不能依赖 Sublime 自动替换所有类型定义
因为类型映射不是一一对应,而是语义对齐。比如 DATETIME 在 MySQL 是无时区类型,迁到 PostgreSQL 要看业务是否需要时区信息——选 TIMESTAMP WITHOUT TIME ZONE 还是 TIMESTAMP WITH TIME ZONE,Sublime 不会帮你判断。
-
JSON类型:MySQL 5.7+、金仓、达梦都原生支持;PostgreSQL 用JSONB更高效,但语义略有差异(去重、排序) -
ENUM:MySQL 允许空字符串和数字索引;PostgreSQL 枚举是严格命名值集合,迁移时必须显式列出所有枚举值 -
TEXT长度限制:MySQL 的TEXT/MEDIUMTEXT在达梦中要换为CLOB,且建表时不能带长度参数(TEXT(1000)是非法语法)
容易被忽略的隐性兼容问题:注释、排序规则、外键行为
这些不报错,但运行时逻辑可能偏移。Sublime 能帮你扫出来,但得你自己决定要不要动。
- MySQL 的
COLLATE utf8mb4_0900_ai_ci在 PostgreSQL 对应en_US.utf8,但后者不区分大小写需靠ILIKE或函数实现,DDL 里写上也没用 - 外键级联动作:
ON DELETE CASCADE大部分库都支持,但达梦 8.0 之前不支持ON UPDATE SET NULL,得查文档确认版本 - 字段注释位置:MySQL 写在
column_name TYPE COMMENT 'xxx',而达梦要求COMMENT ON COLUMN table.col IS 'xxx'单独成句——Sublime 可用多光标 + 正则(\w+)\s+(\w+)\s+COMMENT\s+'([^']+)'提取后批量生成新语句
真正卡住迁移的,往往不是主干 DDL 语法,而是那些散落在建表语句里的“小尾巴”:排序规则、存储引擎提示、分区语法、隐藏字段(如 MySQL 8.0 的 invisible column)。Sublime 的价值,在于让你一眼看见它们,并快速批量处理——但每一处改写,都得对照目标库的手册逐条确认,没有捷径。


















