Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql CLI工具是否提供了一种以控制台友好方式显示二进制数据的方法?_Mysql_Console_Binary Data - Fatal编程技术网

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

mysql CLI工具是否提供了一种以控制台友好方式显示二进制数据的方法?,mysql,console,binary-data,Mysql,Console,Binary Data,我有一个MySQL数据库,其中包含一个具有二进制类型列的表。我希望能够投影该列,而不必运行它,例如十六进制。mysql CLI工具是否有一个配置选项或其他方式来显示二进制数据的表示,这种方式不会输出任意字节,以便我的控制台以有趣/恼人的方式进行解释?既然您希望查看表主要是为了方便,请创建一个视图: CREATE OR REPLACE VIEW myview AS SELECT col1, HEX(col2) AS col2, col3, etc.... FROM table; 然后,您只需

我有一个MySQL数据库,其中包含一个具有二进制类型列的表。我希望能够投影该列,而不必运行它,例如十六进制。mysql CLI工具是否有一个配置选项或其他方式来显示二进制数据的表示,这种方式不会输出任意字节,以便我的控制台以有趣/恼人的方式进行解释?

既然您希望查看表主要是为了方便,请创建一个视图:

CREATE OR REPLACE VIEW myview AS
 SELECT col1, HEX(col2) AS col2, col3, etc....
 FROM table;
然后,您只需引用myview而不是表:


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

创建视图对我来说真的不是一个选项。我正在查看几十个具有二进制UUID列的表,并且我还发现,从SELECT*切换到键入所有列名,而只是将十六进制应用于一列的值,这真的很烦人

最后,我想出了一个创造性的方法,为解决这个麻烦提供了灵感:使用自定义寻呼机命令来清理终端渲染的输出。下面是它的工作原理:

创建具有以下内容的可执行chmod+x Python脚本:

!/usr/bin/python 导入binascii、字符串、sys 对于sys.stdin中的行: line=line.rstrip 列,u,值=行。分区“:” 如果任何c不在string.printable中,则c在值中为: sys.stdout.write%s:%s\n%column,binascii.hexlifyvalue 其他: sys.stdout.write%s\n%line 按如下方式启动MySQL命令行客户端:

$mysql-pager=/home/peter/binary-filter.py-vertical。。。 根据需要更改Python脚本的路径名。您还可以将脚本放在$PATH中,在这种情况下,您可以将名称传递给-pager选项,类似于将less用作MySQL客户端的寻呼机

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

免责声明:这远不是一个完整的解决方案,例如,我展示的Python代码片段期望选择\G格式输出,因此使用了-vertical选项,我对它进行了五分钟的测试,所以它肯定包含bug


我的观点是要说明问题可以通过MySQL命令行客户端解决,因为这就是问题所在!这就是为什么我觉得定义服务器端视图有点落后的原因——只是为了让命令行客户机更加用户友好:-P

对于我来说,数据库大小没有问题,所以我将在每个表中使用两个不同的列,一个作为binary16,另一个作为char32,而不进行索引。它们都将具有相同的值。 当我需要搜索时,我将使用二进制列,当我需要读取时,我将使用char32。


这个场景有什么问题吗?

在/etc/my.cnf中设置mysql客户端选项对我有用:

[client]
binary-as-hex = true

[mysql]
binary-as-hex = true

使用param-binary作为十六进制启动MySQL CLI

例如:

mysql --binary-as-hex

HEX怎么了?这似乎是一个完美的解决方案。因为当我真正想要的只是一个快速的选择时,我不得不这么做。。。这相当不方便。
mysql --binary-as-hex