notepad++仅调用本地命令行客户端执行sql并导出,自身不参与数据库操作;需手动设置.sql文件为sql语言模式或关联文件类型;不同数据库导出需特定参数,nppexec脚本中避免明文密码。

Notepad++ 本身不能执行 SQL 或导出结果,所有“运行并导出”的效果,都靠调用你本地已安装的命令行客户端(如 mysql、psql、sqlcmd 或 sqlite3)完成;它只是个“触发器”和“文本容器”,不参与连接、解析或结果渲染。
SQL 文件必须手动设为 SQL 语言模式
打开 .sql 文件后,默认是“Normal text”模式:关键字不着色、括号不匹配、Ctrl+Shift+F 格式化无效、Ctrl+Q 注释也不起作用。这不是插件没装好,是语言识别根本没激活。
解决方法:语言 → S → SQL(或按 Alt+L,再按 S、Q、L)。更一劳永逸的做法是:在 设置 → 首选项 → 文件关联 中,把 .sql 拖进右侧“SQL”语言栏里。
- 若用的是 Oracle,
sqlplus不支持直接重定向输出到文件(sqlplus user/pass@db @script.sql > out.txt会混入提示符和空行),得改用spool命令 - PostgreSQL 的
psql支持-o output.txt直接导出纯文本结果,但默认带表头和分隔线,加--tuples-only --no-align才接近 CSV 格式 - MySQL 的
mysql -e "SELECT ..."可用--batch --raw --skip-column-names输出无格式纯数据
NppExec 脚本里别硬写密码
写成 mysql -u root -p123456 -D testdb 是高危操作:密码明文留在脚本里,还可能被历史命令泄露。Windows 下更糟——<code>cmd.exe 会把整条命令记入内存和事件日志。
正确做法只有两个:
- 用配置文件:MySQL 写
%USERPROFILE%\my.cnf,PostgreSQL 写%APPDATA%\postgresql\pgpass.conf,然后命令里只写-p(触发交互式输入)或干脆省略 - 让 NppExec 启动时弹出密码框:
NPP_SAVE+INPUTBOX "Enter password:"+ 把变量拼进命令,但要注意密码不会被隐藏显示 - 绝对不要用
echo "password" | mysql ...——管道内容在进程列表里可见,ps或任务管理器一眼就能看到
导出结果时路径和编码容易出错
常见现象:执行完脚本,生成的 result.txt 打开是乱码,或者文件根本没出现在当前目录。
原因和对策:
-
"$(CURRENT_DIRECTORY)"在含中文或空格的路径下会失败,必须用双引号包裹,且 NppExec 要开启「Use new console」选项(否则 cmd 无法正确处理路径) - 命令行工具默认用系统 OEM 编码(如 GBK),而 Notepad++ 新建文件默认是 UTF-8 —— 导出后直接双击打开,Notepad++ 会误判编码。解决方案:导出时强制指定编码,例如
mysql --default-character-set=utf8mb4,或用iconv转码 - 想导出为 Excel 可读的 CSV?别指望命令行原生支持。先导出制表符分隔(
--tab参数),再用 Notepad++ 的「替换」功能把\t替换为,,并确保字段内逗号被引号包裹(这步得靠正则:查找:"([^"]*)(")→替换为:"$1,$2")
别信“一键连接数据库”的插件
目前(2026 年 7 月)仍在维护的插件只有 NppExec。所谓 DBManager、SQL Assistant 等,要么在 v8.x 上加载失败(报 Failed to load xxx.dll),要么菜单项灰掉不可点,要么连上后点执行就崩溃。
真实可用的链路只有这一条:
- 本地装好对应数据库的 CLI 客户端(确认能在 cmd 里直接敲
mysql --version返回正常) - 用 NppExec 写脚本调用它,把
$(FULL_CURRENT_PATH)当作 SQL 文件输入 - 用
2>&1 > result.log合并 stdout/stderr,才能捕获错误信息(比如权限拒绝、表不存在,而不是只看到“命令未找到”) - 导出结果不是终点——检查 exit code:NppExec 的
exit code = 0只代表命令跑完了,不代表 SQL 成功;要 grep 日志里有没有ERROR或ORA-才算真正落地
最常被忽略的一点:SQL 文件末尾没加分号(;),MySQL 和 psql 会静默跳过最后一句;Oracle sqlplus 则根本不会执行——这种“看似运行了,实则什么都没干”的情况,比语法错误更难排查。











