从 SQL 脚本重定向时如何在 MySQL 5.7 中输出 `\N`?

问题描述 投票:0回答:1

我有以下

example.sql
文件:

SELECT '\N', '\\N', SUBSTRING('\\N', 1, 2), SUBSTRING('\\N', 2, 2), CONCAT('\\', 'N');

使用

mysql <example.sql
cat example.sql | mysql
输出执行它:

N   \N  SUBSTRING('\\N', 1, 2)  SUBSTRING('\\N', 2, 2)  CONCAT('\\', 'N')
N   \\N \\N N   \\N

创建

example-2.sql

source example.sql

mysql <example-2.sql
具有相同的输出。

但是通过

source
shell 中的
mysql
执行输出:

+---+----+------------------------+------------------------+-------------------+
| N | \N | SUBSTRING('\\N', 1, 2) | SUBSTRING('\\N', 2, 2) | CONCAT('\\', 'N') |
+---+----+------------------------+------------------------+-------------------+
| N | \N | \N                     | N                      | \N                |
+---+----+------------------------+------------------------+-------------------+

使用

mysql -e "SELECT '\\N', '\\\\N', SUBSTRING('\\\\N', 1, 2), SUBSTRING('\\\\N', 2, 2), CONCAT('\\\\', 'N');"
具有相同的输出。

输出的显着差异是

\N
\\N
。有没有办法让这些保持一致(最好有
\\N
输出
\N
)或者至少让第一个以某种方式输出
\N

真正想要做的是为空值提供

IFNULL
输出
\N
(从我所见,使用
OUTFILE
不能跨远程连接工作)。

附录: 以下输出我想要的:

$ mysql -e "$(cat example.sql)"
+---+----+------------------------+------------------------+-------------------+
| N | \N | SUBSTRING('\\N', 1, 2) | SUBSTRING('\\N', 2, 2) | CONCAT('\\', 'N') |
+---+----+------------------------+------------------------+-------------------+
| N | \N | \N                     | N                      | \N                |
+---+----+------------------------+------------------------+-------------------+

但是,当将输出重定向到文件时,内容再次带有双反斜杠:

$ mysql -e "$(cat example.sql)" >example.out && cat example.out
N   \N  SUBSTRING('\\N', 1, 2)  SUBSTRING('\\N', 2, 2)  CONCAT('\\', 'N')
N   \\N \\N N   \\N

此时,这个问题与 如何在 bash 中通过管道传输到“空对象”?

mysql-5.7
1个回答
0
投票

以下输出我想要的:

$ mysql -e "$(cat example.sql)"
+---+----+------------------------+------------------------+-------------------+
| N | \N | SUBSTRING('\\N', 1, 2) | SUBSTRING('\\N', 2, 2) | CONCAT('\\', 'N') |
+---+----+------------------------+------------------------+-------------------+
| N | \N | \N                     | N                      | \N                |
+---+----+------------------------+------------------------+-------------------+

但是,当将输出重定向到文件时,内容再次带有双反斜杠:

$ mysql -e "$(cat example.sql)" >example.out && cat example.out
N   \N  SUBSTRING('\\N', 1, 2)  SUBSTRING('\\N', 2, 2)  CONCAT('\\', 'N')
N   \\N \\N N   \\N

此时,这个问题与 如何在 bash 中通过管道传输到“空对象”?

© www.soinside.com 2019 - 2024. All rights reserved.