首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql查询结果在控制台中与导出文件中不同

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

Stack Overflow用户
提问于 2017-01-02 18:07:10
回答 1查看 88关注 0票数 1

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

我使用的查询示例如下:

代码语言:javascript
复制
SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\',"Foo",'\\*.*') AS 'List';

在mysql命令行中,查询返回我期望的结果:

代码语言:javascript
复制
mysql> SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\',"Foo",'\\*.*') AS 'List';
+------------+
| List       |
+------------+
| \F\Foo\*.* |
+------------+
1 row in set (0.00 sec)

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

代码语言:javascript
复制
C:\testing123>echo SELECT CONCAT('\\',SUBSTR("Foo",1,1),'\\', "Foo",'\\*.*') AS 'List'; > test.sql

C:\testing123>mysql < test.sql

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-02 18:49:49

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41431394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档