mysql客户端输出格式化神奇现象,以前没注意到,在此分享一下:$ mysql -uroot -e ldquo;show global status like lsquo;uptim
mysql客户端输出格式化神奇现象,,以前没注意到,在此分享一下:
$ mysql -uroot -e “show global status like ‘uptime’”
+—————+———+
| variable_name | value |
+—————+———+
| uptime | 2174838 |
+—————+———+
$ mysql -uroot -e “show global status like ‘uptime’” > /tmp/test
[mysql@dev81 ~]$ cat /tmp/test
variable_name value
uptime 2174855
发现奇怪的地方了吗?格式化的那些符号都不见了!同样的命令,重定向到文件之后,输出变了!
+—————+———+
| variable_name | value |
+—————+———+
| uptime | 2174838 |
+—————+———+
变成了
variable_name value
uptime 2174855
想了很长时间,没想明白。问了下曲山,他二话不说开始用strace,马上就发现了奥妙所在。
$ strace mysql -uroot -e “show global status like ‘uptime’”
……
……
write(1, “+—————+———+\n”, 28+—————+———+
) = 28
write(1, “| variable_name | value |\n”, 28| variable_name | value |
) = 28
write(1, “+—————+———+\n”, 28+—————+———+
) = 28
write(1, “| uptime | 2175430 | \n”, 29| uptime | 2175430 |
) = 29
write(1, “+—————+———+\n”, 28+—————+———+
) = 28
poll([{fd=3, events=pollin|pollpri}], 1, 0) = 0
write(3, “\1\0\0\0\1″, 5) = 5
shutdown(3, 2 /* send and receive */) = 0
close(3) = 0
exit_group(0) = ?
process 24577 detached
$ strace mysql -uroot -e “show global status like ‘uptime’” > /tmp/test
……
……
write(1, “variable_name\tvalue\nuptime\t21755″…, 35) = 35
exit_group(0) = ?
process 24581 detached
针对不同的输出渠道,mysql的客户端似乎有方法可以捕捉到并采取不同的格式化输出策略。不过mysql为什么要这样做的原因还是不知道,估计只有天知道了。