使用批处理获取没有多余符号或字符的 SQL 查询结果?

使用批处理获取没有多余符号或字符的 SQL 查询结果?

像 --disable-column-names 选项一样,我们是否可以选择在文本文件中获取 SQL 查询结果而不包含多余的符号或字符?

例如

mysql -u username -ppassword  --disable-column-names --execute "select rules from test">out.txt

我使用上面的方法来获得结果,但是在我的测试表中包含以下规则

    ---------------------------------------------------------------------
    rules
    ---------------------------------------------------------------------
    select no from tabl1
    select name from tabl2 innerjoin select name from tabl3
    select id from tabl6
    select card from tabl3
    --------------------------------------------------------------------

这是我使用的脚本,上面已经提到过

mysql -u username -ppassword  --disable-column-names --execute "select rules from test">out.txt

当我使用上述查询时我得到的结果

    select no/n from tabl1
    select name/n from tabl2/n innerjoin/n select name/n from tabl3
    select id/n from tabl6
    select card/n from tabl3

有什么方法可以避免这个问题吗?我不希望我的文本文件中出现像“/n”这样的特殊字符?

答案1

使用命令行将 MySQL 查询结果导出到文件

我执行了此操作,但没有得到/n字符,所以我不确定这是怎么回事。也许返回的实际查询结果是 select 语句的文本内容,而这些/n字符是该内容的一部分。我提到这一点是因为你说你的结果是带有这些字符的 select 语句。

您可以使用的另一种解决方案是SELECT INTO OUTFILE使用如下语法...

  • select no INTO OUTFILE 'C:/Folder/Path/out.txt' from tabl1

    1. 通过这个,您可以在命令行中执行此逻辑mysql

      mysql -u username -ppassword --execute "select no INTO OUTFILE 'C:/Folder/Path/out.txt' from tabl1"
      
    2. 否则,您可以将逻辑放入存储过程并接受完整文件路径作为运行时传递给它的第一个参数,然后以mysql这种方式从命令行执行它。

      mysql -u username -ppassword --execute "CALL StoredProcName('C:/Folder/Path/out.txt')"
      

笔记:对于指定 MySQL 将使用的完整文件夹路径,请确保使用单个正斜杠 ( /) 或双反斜杠 ( \\) 来分隔文件夹和文件,因为单个反斜杠 ( \) 是 MySQL 转义字符。


更多资源

  • 选择进入输出文件

    描述

    SELECT ... INTO OUTFILE将结果行写入文件,并允许使用列和行终止符来指定特定的输出格式。默认使用制表符 ( \t) 终止字段,使用换行符 ( \n) 终止行。

    该文件必须不存在。它不能被覆盖。用户需要 FILE运行此语句的权限。此外,MariaDB 需要权限才能在指定位置写入文件。如果secure_file_priv 系统变量设置为非空目录名,则文件只能写入该目录。

    CHARACTER SET条款规定字符集结果将写入其中。如果没有该子句,则不会发生任何转换(二进制字符集)。在这种情况下,如果有多个字符集,则输出也将包含这些字符集,并且可能无法轻松重新加载。

    来源

相关内容