mysql CLI工具是否提供了一种以控制台友好的方式显示二进制数据的方法?

Ric*_*ões 15 mysql console binary-data

我有一个MySQL数据库,其中包含一个带二进制类型列的表.我希望能够投射该列而不必通过它,例如,HEX().是否mysqlCLI工具有一个配置选项或其他手段的方式,不会为我的控制台输出任意字节在热闹的/恼人的方式来解释显示二进制数据的表示?

Pra*_*eep 17

使用param --binary-as-hex启动MySQL CLI

例:

mysql --binary-as-hex
Run Code Online (Sandbox Code Playgroud)

  • 有什么很好的理由为什么这不是默认值? (2认同)

wal*_*lyk 10

由于您想要查看表格主要是为了方便,请创建一个视图:

CREATE OR REPLACE VIEW myview AS
 SELECT col1, HEX(col2) AS col2, col3, etc....
 FROM table;
Run Code Online (Sandbox Code Playgroud)

然后,您所要做的就是参考myview而不是table:

SELECT * FROM myview;
Run Code Online (Sandbox Code Playgroud)


sma*_*wjw 10

/etc/my.cnf为我设置mysql客户端选项:

[client]
binary-as-hex = true

[mysql]
binary-as-hex = true
Run Code Online (Sandbox Code Playgroud)


xol*_*lox 5

使用二进制数据查看结果集时MySQL命令行客户端的行为一直是我的烦恼,实际上我找到了这个页面,因为我再次被MySQL命令行客户端烦恼(在查看时将二进制数据转储到我的终端中)在结果集中使用二进制UUID列)我想一劳永逸地解决问题:-)

创建视图对我来说真的不是一个选项(我正在查看几十个带有二进制UUID列的表),而且我还发现切换SELECT *到输入所有列名称真的很烦人(这样HEX()才能应用)到一列的值).

最终,我想出了一个创造性的黑客,为这个烦恼的替代解决方案提供灵感:使用自定义寻呼机命令来清理终端渲染的输出.以下是它的工作原理:

  1. 使用以下内容创建可执行文件(chmod + x)Python脚本:

    #!/usr/bin/python
    
    import binascii, string, sys
    
    for line in sys.stdin:
        line = line.rstrip()
        column, _, value = line.partition(': ')
        if any(c not in string.printable for c in value):
            sys.stdout.write("%s: %s\n" % (column, binascii.hexlify(value)))
        else:
            sys.stdout.write("%s\n" % line)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 启动MySQL命令行客户端,如下所示:

    $ mysql --pager=/home/peter/binary-filter.py --vertical ...
    
    Run Code Online (Sandbox Code Playgroud)

    根据需要更改Python脚本的路径名.您也可以将脚本放入您的脚本中$PATH,在这种情况下,您只需将名称传递给该--pager选项(类似于您将如何less用作MySQL客户端的寻呼机).

  3. 现在,当您SELECT ...,任何显示其值包含不可打印字符的列的行都会被重写,以便将完整值呈现为十六进制字符,类似于MySQL HEX()函数的结果.

免责声明:这远不是一个完整的解决方案,例如我展示的Python片段需要SELECT ... \G格式输出(因此--vertical选项),我测试了它的所有五分钟,因此它必然包含错误.

我的观点是要证明问题可以在MySQL命令行客户端一侧解决,因为问题出在那里!(这就是为什么定义服务器端视图让我觉得倒退 - 只是为了让命令行客户端更加用户友好:-P)