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)
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)
使用二进制数据查看结果集时MySQL命令行客户端的行为一直是我的烦恼,实际上我找到了这个页面,因为我再次被MySQL命令行客户端烦恼(在查看时将二进制数据转储到我的终端中)在结果集中使用二进制UUID列)我想一劳永逸地解决问题:-)
创建视图对我来说真的不是一个选项(我正在查看几十个带有二进制UUID列的表),而且我还发现切换SELECT *到输入所有列名称真的很烦人(这样HEX()才能应用)到一列的值).
最终,我想出了一个创造性的黑客,为这个烦恼的替代解决方案提供灵感:使用自定义寻呼机命令来清理终端渲染的输出.以下是它的工作原理:
使用以下内容创建可执行文件(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)启动MySQL命令行客户端,如下所示:
$ mysql --pager=/home/peter/binary-filter.py --vertical ...
Run Code Online (Sandbox Code Playgroud)
根据需要更改Python脚本的路径名.您也可以将脚本放入您的脚本中$PATH,在这种情况下,您只需将名称传递给该--pager选项(类似于您将如何less用作MySQL客户端的寻呼机).
现在,当您SELECT ...,任何显示其值包含不可打印字符的列的行都会被重写,以便将完整值呈现为十六进制字符,类似于MySQL HEX()函数的结果.
免责声明:这远不是一个完整的解决方案,例如我展示的Python片段需要SELECT ... \G格式输出(因此--vertical选项),我测试了它的所有五分钟,因此它必然包含错误.
我的观点是要证明问题可以在MySQL命令行客户端一侧解决,因为问题出在那里!(这就是为什么定义服务器端视图让我觉得倒退 - 只是为了让命令行客户端更加用户友好:-P)
| 归档时间: |
|
| 查看次数: |
6703 次 |
| 最近记录: |