如何在MySQL Workbench中直接查看BLOB数据?

93

我正在使用MySQL Workbench CE 5.2.30 CE / Rev 6790。当执行下面的语句时:

SELECT OLD_PASSWORD("test")

我只看到一个漂亮的 BLOB 图标,我需要左键选中单元格,右键选择“在查看器中打开值”,然后选择“文本”选项卡。

使用phpMyAdmin也一样,我可以直接得到OLD_PASSWORD调用的值。这只是一个例子,但是否有办法直接在输出中看到这样的结果?


请确保您检查我的答案,它已经获得了41个赞 - 三年后我仍然有人给它点赞。 - spioter
@spioter 谢谢提醒,已完成!虽然我没有测试它,因为我目前没有使用它。 - mark
谢谢Mark!我不知道为什么我假定原始提问者甚至不会看到我的评论 - 我只是把它作为未来观众的指针 :-p 干杯。 - spioter
1
请注意,在MySQL Workbench中悬停在此选项上时会弹出警告:“警告:由于二进制字节字符串往往包含零字节,打开此选项可能会导致查看/编辑数据时发生数据截断。” - Accountant م
1
注意--如果您有任意二进制字节--如果BLOB是任意字节序列,例如用于存储128位GUID或md5校验和的BINARY(16),那么这里的答案并不特别有用。在这种情况下,目前没有编辑器首选项(尽管我现在已经提交了一个功能请求);在这种情况下,解决方案是查询中的HEX函数:SELECT HEX(mybinarycolumn) FROM mytable。(另一种选择是使用phpMyAdmin而不是MySQL Workbench-在那里,默认显示十六进制。) - ToolmakerSteve
12个回答

128

简而言之:

在MySQL Workbench 6.0+中

  1. 进入 编辑 > 首选项
  2. 选择 SQL 编辑器
  3. SQL 执行 下,勾选 将 BINARY/VARBINARY 视为非二进制字符字符串
  4. 重新启动MySQL Workbench(您将不会收到提示或通知)。

在旧版本的 MySQL Workbench 中

  1. 进入 编辑 > 首选项
  2. 选择 SQL 查询
  3. 查询结果 下,勾选 将 BINARY/VARBINARY 视为非二进制字符字符串
  4. 重新启动MySQL Workbench并不是必需的(您将不会收到提示或通知)。

有了这个设置,您就能够连接字段而不会得到二进制大对象。

我认为这适用于5.2.22版本及其后续版本,并且是由this MySQL bug引起的。

免责声明:我不知道这个设置的缺点是什么 - 也许当您选择BINARY/VARBINARY值时,您会将其视为纯文本,这可能会误导您和/或者如果它们足够大,可能会影响性能?


2
请注意:在 MySQL Workbench 5.2.39 版本中,应使用 "SQL编辑器" 而不是 "SQL查询"。 - GDICommander
在5.2.44 CE rev 9933中,原帖发布者的代码可以正确显示数据。我非常确定相关的设置是“将BINARY/VARBINARY视为非二进制字符字符串”,可以通过以下方式访问:编辑/首选项/SQL查询(在“查询结果”部分下)需要检查此设置-我无法回忆起它是否默认选中。 - spioter
2
可以在6.3.3版本中使用,并且更改设置后无需重新启动Workbench。 - trebormf
5
在Mac上使用MySQL Workbench 8.0.21版本,在勾选“将BINARY/VARBINARY作为非二进制字符字符串处理”选项后,尝试刷新结果集时,工作台一直在加载而没有从数据库中返回任何值...是否还有其他人遇到这种问题? - fsasvari
1
@HartleySan 不确定是否相关,但对我来说,在“user_password”、“user_newpassword”和“user_email”列上不起作用。也许这些是例外情况?但是使用“convert(col using utf8)`”可以在所有列上使用。 - Gerard ONeill
显示剩余4条评论

36

我不确定这个回答是否正确,但是如果你在查看表格时右键点击字段中的“blob”图标,会出现一个“在编辑器中打开值”的选项。其中一个选项卡可以让你查看该blob。这个功能在5.2.34版本中可用。


完美运行。这应该被接受的答案,因为它不需要任何设置更改。 - Yuvraj Mudaliar
补充一下。这对我也有效。当您单击编辑器中的“打开值”时,默认情况下会显示二进制值。但是,如果您注意到有一个标签说“文本”。该选项卡以文本格式显示正确的值。 :) - The 0bserver
同意这是最简单的解决方案。我没有注意到弹出窗口有选项卡,这就是我的问题所在。 - JCutting8
1
顺便说一句:我确定这并不是回答问题的方法,因为在第二段中,楼主表示这是他们现在所做的...而他们正在寻找更方便的解决方案。尽管如此,这是一个有趣的社会实验,它表明对于许多人(甚至大多数人),浏览这些答案以找到帮助他们的答案比在问题中找到他们需要的答案更容易。 :) - ToolmakerSteve

32

请执行以下三个步骤:

  1. 进入“工作台首选项”--> 在“查询结果”下选择“SQL编辑器”: 选中“将BINARY/VARBINARY作为非二进制字符串处理”

  2. 重新启动MySQL Workbench。

  3. 现在选择 SELECT SUBSTRING(<BLOB_COLUMN_NAME>,1,2500) FROM <Table_name>;


6
有趣的是,这个回答与得分最高的回答非常相似,而且晚了一点 :-p。 - spioter
@Johny19:我认为它之所以被点赞,是因为它提供了“SUBSTRING”示例。 - Björn
2
不是BLOB <COLUMN_NAME>,而是 <BLOB_COLUMN_NAME> - QkiZ

15

强制类型转换是可行的,但会比较麻烦。所以我建议除非你在使用大量真正的 Blob 数据,否则使用 spioter 的方法。

SELECT CAST(OLD_PASSWORD("test") AS CHAR)

你还可以将其转换为其他类型,甚至限制其大小,但大多数情况下我只使用CHAR:

http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast

我不知道这是否是强制转换的后果,但我确实按照您建议的做了,但新行没有出现。我得到了一行非常长的文本。无论如何,它对我所需的内容有用。 - Antônio Medeiros
这实际上是MySQL工作台,如果你右键单击,在弹出窗口中查看,那么它将会正确显示...是的,这很烦人。 - CSTobey

15
select CONVERT((column_name) USING utf8) FROM table;

在我的情况下,Workbench 不起作用,因此我使用上述解决方案将 blob 数据显示为文本。


在MacOS Mojave上的8.0.19版本中运行得非常好。 - bappak
这可能应该是最佳答案(接受的答案也没有问题!)使用最佳答案,由于某种原因,仍然无法转换某些列。但是此方法适用于所有列和db_access表单,且不需要进行任何设置更改。 - Gerard ONeill
我有一些数据存储在数据库中,以base64的形式存在。我必须同时使用两种解决方案。我设置了二进制/变长二进制设置,但仅此还不足以返回可读的值。但是当我使用您的解决方案时,它可以正常工作。例如,CONVERT(from_base64(data_i_am_querying) USING utf8)。现在我的数据是可读的。我不确定为什么它能够正常工作,但它确实可以。 - ken koehler

7

1
这不再是正确的答案(自5.2.22起)。请参见下面spioter的答案。 - htxryan

5

MySQL文档 所述,如果您遇到相同的问题,可以选择 BLOB 的子字符串:

SELECT id, SUBSTRING(comment,1,2000) FROM t

您好,glissi


5

我把其他帖子的一些内容拼凑在一起,因为工作台“首选项”修复对我没有用。(WB 6.3)

SELECT CAST(`column` AS CHAR(10000) CHARACTER SET utf8) FROM `table`;

4

工作台 6.3
按照得分最高的答案,然后使用 UNCOMPRESS()

(简单来说:
1. 转到编辑 > 首选项
2. 选择 SQL 编辑器
3. 在 SQL 执行下,勾选将二进制/变长二进制视为非二进制字符字符串
4. 重新启动 MySQL Workbench(您将不会收到提示或通知此要求)。)

接下来

SELECT SUBSTRING(UNCOMPRESS(<COLUMN_NAME>),1,2500) FROM <Table_name>;

或者

SELECT CAST(UNCOMPRESS(<COLUMN_NAME>) AS CHAR) FROM <Table_name>;

如果你只是简单地输入UNCOMPRESS(<COLUMN_NAME>),那么你可以右键单击 blob 并选择 "在编辑器中打开值"。

3
这个答案应该解释何时使用UNCOMPRESS。虽然我从未使用过它,但根据MySQL文档,只有在使用COMPRESS创建二进制值时才适用: “如果参数不是压缩值,则结果为NULL。” - ToolmakerSteve

2
注意:如果BLOB是任意字节序列,如用于存储128位GUID或md5校验和的BINARY(16),则前面的答案并不特别有用。
在这种情况下,目前没有编辑器首选项 - 尽管我现在已经提交了一个功能请求 - 可以查看该请求以获取更详细的解释。
[在实现该功能请求之前/之外],解决方案是在查询中使用HEX函数:SELECT HEX(mybinarycolumn) FROM mytable
一种替代方案是使用 phpMyAdmin 而不是 MySQL Workbench - 在这里默认显示十六进制。

谢谢Steve,这正是我在寻找的。希望他们能在工作台中添加该选项。 - M22an

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接