SQL压缩
去注释去空白,SQL压成一行
这个工具能做什么
这个工具把书写时为了可读性而换行、缩进、加注释的 SQL 语句,压缩成没有多余空白的紧凑一行。开发中经常需要把一段 SQL 放进 JSON 配置、YAML、环境变量或某段代码的字符串常量里,原始的多行格式带着缩进和 -- 注释直接粘过去既占地方、又容易在转义时出错。SQL 压缩会一次性完成 sql 去注释和 sql 去空格两件事:删掉 -- 行注释与 /* */ 块注释,再把连续的空格、制表符和换行折叠成单个空格。压缩后的语句语义完全不变,仍可直接交给数据库执行。整个 sql minify 过程在浏览器本地完成,不会把语句上传到服务器。
压缩 SQL 看似只要几个正则替换就能搞定,但直接用正则很容易把字符串里的内容也一起破坏。工具实际是按字符扫描整段文本、维护一个状态机来判断当前位置处在普通代码、字符串还是注释之中。遇到单引号、双引号或反引号就进入字符串状态,此时任何空格、换行乃至 -- 和 /* 都被当作普通字符原样保留,直到匹配到对应的收尾引号才退出;SQL 里用两个连续引号表示的转义引号也会被正确跨过,不会被误判为字符串结束。只有在代码状态下遇到 -- 才吃掉到行尾、遇到 /* 才吃掉到 */,其余的空白才参与折叠。正因为区分了这几种状态,注释符号出现在字符串字面量里时才不会被误删。
最常见的用法是把开发时写得很舒展的查询压进配置或代码。比如一段带缩进和注释的多表 JOIN 查询,要塞进 Java、Go 的字符串常量或者 Nacos、Apollo 的配置项,先压成一行就省去手工删注释、拼接换行的麻烦,也避免换行导致的字符串拼接错误。又比如排查线上问题时,从慢查询日志或 ORM 打印出来的 SQL 往往夹杂大量缩进和框架生成的注释,压缩成一行后更方便贴进工单、聊天窗口,或用 diff 工具逐条比对两次执行的语句差异。对于要通过 mysql -e、psql -c 这类命令行参数直接执行的场景,压成一行也能省掉引号和换行的转义烦恼。
使用时有几个边界要留意。折叠空白时工具是把连续空白换成一个空格,而不是删到零个,因为 SELECT a FROM t 这样的关键字之间必须留有分隔,压成 SELECTaFROMt 会直接语法出错,所以结果是「一行但仍保留必要空格」而非字面上毫无空白。它按文本处理、并不解析具体 SQL 方言,因此 MySQL 里 /*! ... */、/*+ ... */ 这类本身携带可执行语义或优化器提示的「特殊注释」,会和普通块注释一样被当成注释删掉,语句若依赖这些提示请压缩后确认。另外它识别的是 -- 行注释和 /* */ 块注释,MySQL 特有的 # 行注释是否处理取决于实现,含 # 注释时最好先自行核对。它做的是压缩(minify)而非格式化,和 SQL 美化是相反方向的操作,需要重新展开阅读时应改用格式化工具。
SQL压缩是一个免费的在线工具,打开网页就能用,不用下载也不用注册。平时大家搜的“sql压缩”、“sql去注释”、“sql minify”,说的都是这个。
常见使用场景
- 把多行查询压成一行嵌进 JSON 或 YAML 配置
- 去掉建表语句的注释再写进代码字符串常量
- 压缩长 SQL 方便贴进 mysql -e 命令行执行
- 精简慢查询日志里的语句便于逐行比对
- 清理导出脚本的注释和空行缩小文件体积
使用方法
- 把内容粘贴到输入框(生成类工具直接设置选项)。
- 按需要选择选项,点操作按钮。
- 结果出现在下方,点「复制结果」即可带走。