SQL 标识符双引号处理
文本所有处理都在浏览器本地完成,数据不上传服务器
两件事,各自对应一个真实场景。 加引号:把一段 MySQL 风格的 SQL 搬到 Postgres / Oracle 上。MySQL 的标识符默认大小写不敏感,而 Postgres 会把未加引号的标识符折叠成小写 —— 一个叫 `userID` 的字段搬过去就变成了 `userid`,语句报「列不存在」。加上双引号才能保住原来的大小写。 去引号:把 Postgres 导出的 `"users"`、`"userID"` 还原成裸标识符,好读,也好粘进那些不吃引号的老工具。 ⚠️ 最关键的一条:字符串字面量与注释里的内容一个字都不动。 一个「找到所有单词加引号」的天真实现在 `INSERT INTO t VALUES ('active')` 上会给出 `'"active"'` —— 数据里凭空多出两个引号,而且语句照样能执行,错误要到读数据时才发现。所以这里用一个小扫描器,字符串、注释、已有的引号标识符都整段跳过。 去引号时「去不掉就留着」:`"user id"`(含空格)、`"order"`(保留字)、`"2fa"`(数字开头)去掉引号之后都是非法标识符。这时保留引号并把数量报给你,而不是造出一段不能执行的 SQL。
功能
- 给表名、字段名、别名等标识符批量加双引号
- 或去掉已有的双引号与反引号(反引号会统一转成三家都认的双引号)
- ⚠️ 字符串字面量里的内容一个字都不动(含 `''` 转义的字符串)
- 行注释 `--` 与块注释 `/* */` 里的内容一个字都不动
- SQL 关键字不加引号(给 `select` 加引号会让它变成一个列名)
- 中文标识符也会加引号(`用户表` → `"用户表"`)
- 去引号时遇到无法裸写的名字会保留引号,并如实报告有几个
- 结果逐行可复制,说明文字不会混进复制内容
使用方法
- 粘贴一段 SQL
- 选「加双引号」或「去掉双引号」
- 结果实时更新,点复制取走
常见问题
- 字符串里的内容会被改吗?
- 不会,这是这个工具最要紧的一条。`INSERT INTO t VALUES ('active')` 里的 `active` 是数据不是标识符,加引号会把它变成 `'"active"'` —— 多出来的两个引号会真的存进数据库。而且语句照样能跑,错误要到读数据时才发现。同理,`-- 注释` 与 `/* 块注释 */` 里的内容也整段跳过。
- 关键字为什么不加引号?
- 因为给 `select` 加引号会让它从关键字变成一个叫 `select` 的列名 —— 语句的意思当场就变了。所以工具内置了一张 SQL 关键字表,命中的词原样保留。个别冷门关键字可能没在表里,那时顶多让语句报「列不存在」,一跑就发现,不会静默改语义。
- 去引号时为什么有些引号去不掉?
- 因为去掉之后那个名字不合法。三种情况:含空格或特殊字符(`"user id"` 去掉引号就断成两个词)、是保留字(`"order"` 去掉之后会与 `ORDER BY` 冲突)、数字开头(`"2fa"` 不是合法标识符)。这时工具保留引号,并在结果里告诉你一共有几个这样的名字 —— 造出一段不能执行的 SQL 比留着几个引号糟糕得多。
相关工具
文本清洗
文本清洗从日志或表格里复制出来的一列内容:去重行、排序、去空行、去首尾空白、去行号、合并多空格,规则逐条开关。粘贴的内容只在本机处理。
命名风格转换
文本在十四种命名风格之间转换标识符,拆词时认得 fooBarBaz 与 FOO_BAR 这类混写,连续大写也会按词拆开。全部在浏览器本地完成,不上传。
JSON 格式化
格式化在线 JSON 格式化与校验工具:树形折叠浏览、搜索键值、逐节点改值与删除、语法错误定位到具体行列,输入框带行号与高亮。全部在浏览器本地完成。
文本对比
文本把两份文本逐行对比,高亮标出新增、删除与未改动的行,改动按最小差异对齐,而不是整段标成变了。全部在浏览器本地完成,内容不上传。
字数统计
文本中英混排的文本到底有多长?中文按字、英文按词分开统计,给出字符数、行数、字节数、阅读与朗读时长,以及会被切成几条短信。全部在本机完成。
简繁转换
文本在简体与繁体之间互转中文,常用词整词替换,其余字取最常见写法,因此个别字词仍需人工核对。全部在浏览器本地完成,不上传。