gpt4 book ai didi

控制台中的 mysql 查询结果与导出文件中的不同

转载 作者:行者123 更新时间:2023-11-28 23:21:23 25 4
gpt4 key购买 nike

我正在编写一个查询,以从数据库表中创建文件夹列表和通配符,然后将其用于批处理文件中以复制大量文件夹。我已经编写了一个返回我感兴趣的内容的查询,但是我注意到导出到文件或显示到控制台时的查询结果与在 mysql 客户端本身中的查询结果不同。具体来说,我通过加倍转义“\”字符,但在写入文件时转义字符显示。

我使用的查询示例如下:

SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\',"Foo",'\\*.*') AS 'List';

从 mysql 命令行查询返回我期望的结果:

mysql> SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\',"Foo",'\\*.*') AS 'List';
+------------+
| List |
+------------+
| \F\Foo\*.* |
+------------+
1 row in set (0.00 sec)

但是,如果我将相同的查询写入名为 test.sql 的文件并尝试通过管道输入查询并显示或输出输出,我将在输出中获得转义字符:

C:\testing123>echo SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\', "Foo",'\\*.*') AS 'List'; > test.sql

C:\testing123>mysql < test.sql

List
\\F\\Foo\\*.*

当我使用 INTO OUTFILE 时得到相同的结果

我已经尝试从 test.sql 查询文件中删除转义字符,但这只会导致查询抛出错误(正如预期的那样)。

最佳答案

关于字符转义,可能不同的输出方法使用不同的sql_mode。当您使用命令 set sql_mode = 'NO_BACKSLASH_ESCAPES'; 禁用字符转义时,上面的查询也会在控制台中为您提供两个反斜杠(或者如果您在查询中只写一个反斜杠,则会抑制错误):

set sql_mode = 'NO_BACKSLASH_ESCAPES';
SELECT CONCAT('\',SUBSTR("Foo",1,1),'\',"Foo",'\*.*') AS 'List';
-> \F\Foo\*.*

set sql_mode = 'NO_BACKSLASH_ESCAPES';
SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\',"Foo",'\\*.*') AS 'List';
-> \\F\\Foo\\*.*

set sql_mode = '';
SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\',"Foo",'\\*.*') AS 'List';
-> \F\Foo\*.*

set sql_mode = '';
SELECT CONCAT('\',SUBSTR("Foo",1,1),'\',"Foo",'\*.*') AS 'List';
-> You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\',"Foo",'\*.*') AS 'List'' at line 1

关于控制台中的 mysql 查询结果与导出文件中的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41431394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com