--skip-column-names在跨脚本调用存储过程时失效问题咨询
问题原因
当使用-e "SOURCE overall.sql"执行命令时,--skip-column-names参数仅对-e后直接指定的SOURCE命令本身生效,而SOURCE加载的overall.sql内的CALL myProc()语句,其输出格式并未继承该客户端参数设置,导致列名依然显示。
解决方法
方案1:直接以输入文件方式执行overall.sql
放弃-e参数,将overall.sql作为mysql客户端的输入文件,整个脚本执行过程都会应用--skip-column-names参数:
mysql <connection properties> --skip-column-names < overall.sql
方案2:在overall.sql内显式关闭列名输出
在overall.sql中调用存储过程前,使用mysql客户端内置命令\set关闭列名显示,执行完成后可按需恢复:
-- 在overall.sql中添加 \set column_names 0; CALL myProc(); -- 若后续需要恢复列名显示,可添加 -- \set column_names 1;
方案3:使用--batch参数替代--skip-column-names
--batch参数会自动启用--skip-column-names和--silent模式,确保所有输出都不带列名:
mysql <connection properties> --batch -e "SOURCE overall.sql"
方案4:修改存储过程(可选)
如果允许修改存储过程,可将SELECT语句的结果拼接为无列名的格式,例如用CONCAT组合字段:
-- 示例:拼接字段输出,无列名 SELECT CONCAT(col1, ',', col2, ',', col3) FROM your_table;
内容的提问来源于stack exchange,提问作者Marko Galesic
相关产品推荐
相关产品推荐

