我有以下
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 -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 中通过管道传输到“空对象”?