我如何直接在MySQL Workbench中查看Blob


72

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

SELECT OLD_PASSWORD("test")

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

与phpMyAdmin一起使用时,我直接获得了OLD_PASSWORD调用的值。这只是一个示例,但是有没有办法在输出中直接看到这样的结果?


确保您在下面检查我的答案-已投票41次-我仍然(3年后)让有人投票。
蜘蛛2014年

@spioter感谢您的提醒,完成了!尽管我没有测试它,因为我当前没有使用它。
2014年

谢谢马克!我不知道为什么我只是以为原始提问者甚至不会看到我的评论-我只是把它作为未来观众的指点:-p欢呼。
spioter 2014年

请注意,当我将鼠标悬停在MySQL Workbench中的此选项上时,此警告消息会“警告:由于二进制字节串的值往往包含零字节,因此在查看/编辑时打开此选项可能会导致数据截断”
会计م

注意-如果您具有任意的二进制字节-如果BLOB是字节的任意序列,则此处的答案不是特别有用。例如BINARY(16)来存储128位GUID或md5校验和。在这种情况下,当前没有编辑器首选项(尽管我现在已经提交了功能请求);在这种情况下,解决方案是HEX查询中的函数:SELECT HEX(mybinarycolumn) FROM mytable。(一种替代方法是使用phpMyAdmin代替MySQL Workbench-默认情况下显示十六进制。)
ToolmakerSteve

Answers:


112

简而言之:

  1. 转到编辑>首选项
  2. 选择SQL编辑器
  3. 在“ SQL执行”下,选中“将BINARY / VARBINARY视为非二进制字符串”
  4. 重新启动MySQL Workbench(不会提示您此要求)。

在MySQL Workbench 6.0+中

  1. 转到编辑>首选项
  2. 选择SQL查询
  3. 在“查询结果”下,选中“将BINARY / VARBINARY视为非二进制字符串”
  4. 不必重新启动MySQL Workbench(不会提示或通知您此要求)。*

使用此设置,您将可以串联字段而不会引起斑点。

我认为这适用于5.2.22及更高版本,并且是此MySQL错误的结果。

免责声明:我不知道此设置的缺点-也许当您选择BINARY/VARBINARY值时,您会看到它是纯文本,这可能会引起误解,并且/或者如果它们足够大,则会妨碍性能?


2
仅供参考:在MySQL Workbench的5.2.39版中,它是“ SQL编辑器”,而不是“ SQL查询”。
GDICommander 2013年

在5.2.44 CE rev 9933中,原始张贴者发布的代码正确显示了数据。我很确定相关设置是“将BINARY / VARBINARY作为非二进制字符串处理”,可以通过以下方式访问:Edit / Preferences / SQL Queries(在“ Query Results”部分下)需要检查此设置-我无法回忆起是否默认情况下已对其进行检查
spioter's

请不要在不更新编辑所适用的版本号的情况下编辑我的帖子-撰写此帖子时2014-11-23 11:28-它们不兼容。恢复为原始版本,或更新版本号以确保准确。
spioter 2014年

我想我知道间谍在哪里得到了他所有的声望点!辛苦了,谢谢!
肖恩·肯德尔2015年

2
在6.3.3中工作,更改设置后无需重新启动Workbench。
trebormf

28

我不确定这是否能回答问题,但是如果您右键单击字段中的“ blob”图标(查看表时),则可以使用“在编辑器中打开值”选项。其中一个标签可让您查看Blob。这是事实。5.2.34


完美的工作原理。这不需要任何设置更改即可被接受。
Yuvraj Mudaliar

要添加到此。它也对我有用。在编辑器中单击“打开值”时,默认情况下会显示“二进制”值。但如果您注意到有一个标签说Text。该选项卡以文本格式显示正确的值。:)
0bserver

同意这是最简单的解决方案。我没有注意到弹出窗口有选项卡,这是我的问题。
JCutting8年

FWIW:我确定这不能解决问题,因为在第二段中OP指出这就是他们现在正在做的事情,并且他们正在寻找更方便的解决方案。然而,这是一个有趣的社会实验,它表明,对于很多(也许甚至是大多数人)来说,浏览这些答案更容易找到一个对他们有帮助的答案,而不是找到他们所需要的答案,而不是将它们隐藏在问题的某个地方。:)
ToolmakerSteve

27

执行三个步骤:

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

  2. 重新启动MySQL WorkBench。

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


6
有趣的是,它比得分最高的答案有多相似,后来再说:-p
spioter

@ Johny19:我认为由于“ SUBSTRING”的示例,它已被否决。
比约恩

不是BLOB<COLUMN_NAME>,但<BLOB_COLUMN_NAME>
QkiZ

14

转换有效,但这很痛苦,因此除非您使用大量真实的Blob数据,否则我建议使用spioter方法。

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

您还可以将其转换为其他类型,甚至限制大小,但是大多数时候我只使用CHAR:http : //dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast


我不知道这是否是强制转换的结果,但我完全按照您的建议进行了操作,没​​有出现新行。我仅一行就收到了很长的文字。无论如何,它满足了我的需求。
Antonio Vinicius Menezes Medei 2015年

那实际上是MySQL工作台,如果右键单击,在弹出窗口中查看,那么它将正确显示...是的,这很烦人。
CSTobey


5

有同样的问题,根据MySQL文档,您可以选择BLOB的子字符串:

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

HTH,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执行”下,选中“将BINARY / VARBINARY视为非二进制字符串”
。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,然后单击“在编辑器中打开值”。


1
该答案应说明何时 UNCOMPRESS合适。根据MySQL文档,虽然我从未使用过它,但仅当COMPRESS用于创建BINARY值时才合适:“如果参数不是压缩值,则结果为NULL。”
ToolmakerSteve

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

就我而言,Workbench不起作用。所以我用上述解决方案将blob数据显示为文本。


在MacOS Mojave的8.0.19版本中像超级按钮一样工作。
bappak '20

2

有几件事你可以做

SELECT GROUP_CONCAT(CAST(name AS CHAR))
FROM product
WHERE  id   IN (12345,12346,12347)

如果您想通过查询进行订购,则可以按如下所示按类型进行订购

SELECT GROUP_CONCAT(name ORDER BY name))
FROM product
WHERE id   IN (12345,12346,12347)

正如它在这个博客上所说的

http://www.kdecom.com/mysql-group-concat-blob-bug-solved/


1
添加答案时,尤其是几年后,请说明为什么要添加另一个答案。双方CSTobeymbunch已表明,BLOB字段可以CAST.. AS CHAR。我认为您在证明CAST对于使GROUP_CONCAT工作正常有用吗?不幸的是,链接断开了。顺便说一句,您的第二个代码示例有问题...
ToolmakerSteve

0

注意:如果BLOB是字节的任意序列,则前面的答案并不是特别有用。例如BINARY(16)来存储128位GUID或md5校验和。

在这种情况下,尽管我现在已经提交了功能请求,但目前没有编辑器的首选项-请参阅该请求以获取更详细的说明。

[除非/除非实现了功能请求,否则解决方案是HEX查询中的功能:SELECT HEX(mybinarycolumn) FROM mytable


一种替代方法是使用phpMyAdmin代替MySQL Workbench-默认情况下显示十六进制。


谢谢史蒂夫,这正是我想要的。希望他们在工作台中添加该选项。
M22an

-3

SELECT *,CONVERT(UNCOMPRESS(column)using“ utf8”)AS列from table_name

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.