如何在 MySQL Workbench 中直接查看 blob

Posted

技术标签:

【中文标题】如何在 MySQL Workbench 中直接查看 blob【英文标题】:How can I directly view blobs in MySQL Workbench 【发布时间】:2011-05-19 15:22:07 【问题描述】:

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

SELECT OLD_PASSWORD("test")

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

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

【问题讨论】:

确保您在下面查看我的答案 - 已获得 41 次支持 - 我仍然(3 年后)让人们支持它。 @spioter 感谢您的提醒,完成!虽然我没有测试它,因为我目前没有使用它。 谢谢马克!我不知道为什么我只是假设最初的提问者甚至不会看到我的评论 - 我只是把它作为未来观众的指针:-p欢呼。 小心,当我在 MySQL Workbench 中将鼠标悬停在此选项上时,此警告会出现 "警告:由于二进制字节字符串的值中往往包含零字节,打开此选项可能会导致数据查看/编辑时截断” 注意 -- If you have arbitrary binary bytes -- 如果 BLOB 是任意字节序列,这里的答案并不是特别有用;例如BINARY(16) 存储 128 位 GUID 或 md5 校验和。在这种情况下,目前没有编辑器偏好(尽管我现在已经提交了功能请求);在这种情况下,解决方案是查询中的HEX 函数:SELECT HEX(mybinarycolumn) FROM mytable。 (另一种方法是使用 phpMyAdmin 而不是 MySQL Workbench - 默认显示十六进制。) 【参考方案1】:

简而言之:

    转到编辑 > 首选项 选择SQL 编辑器SQL Execution下,勾选Treat BINARY/VARBINARY as nonbinary string 重新启动 MySQL Workbench(不会提示或通知您此要求)。

在 MySQL Workbench 6.0+ 中

    转到编辑 > 首选项 选择 SQL 查询查询结果下,勾选Treat BINARY/VARBINARY as nonbinary string 重启 MySQL Workbench 不是强制性的(不会提示或通知您此要求)。*

使用此设置,您将能够连接字段而不会获得 blob。

我认为这适用于 5.2.22 及更高版本,是this MySQL bug 的结果。

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

【讨论】:

仅供参考:在 MySQL Workbench 5.2.39 版本中,它是“SQL 编辑器”,而不是“SQL 查询”。 在 5.2.44 CE rev 9933 中,原始发布者发布的代码正确显示了数据。我很确定相关设置是“将 BINARY/VARBINARY 视为非二进制字符串”,可以通过以下方式访问:编辑/首选项/SQL 查询(在“查询结果”部分下)需要检查此设置 - 我不记得是否默认勾选 在 6.3.3 中工作,更改设置后我不需要重新启动 Workbench。 在 Mac 上使用 MySQL Workbench 版本 8.0.21 并检查“将 BINARY/VARBINARY 作为非二进制字符串”选项后,尝试刷新结果集,Workbench 只是加载和加载而不返回任何值数据库...还有其他人出现这种问题吗? @HartleySan 不确定这是否相关,但对我来说,它不适用于“user_password”、“user_newpassword”和“user_email”列。也许这些是特殊的?但是使用 'convert(col using utf8)` 适用于所有列。【参考方案2】:

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

【讨论】:

完美运行。这应该被接受,因为它不需要更改任何设置。 添加到这个。它也适用于我。当您单击在编辑器中打开值时,默认情况下会显示二进制值。但如果你注意到有一个标签写着Text。该选项卡以文本格式显示正确的值。 :) 同意这是最简单的解决方案。我没有注意到弹出窗口有标签,这是我的问题。 FWIW:我确定这回答了这个问题,因为在第二段 OP 中指出这就是他们现在所做的......他们正在寻找一个更方便的解决方案。然而,这是一个有趣的社会实验,它表明对于许多人(也许甚至大多数人)来说,浏览这些答案以找到对他们有帮助的答案要比找到他们需要的答案、隐藏在问题的某个地方更容易。 :)【参考方案3】:

执行三个步骤:

    进入“WorkBench Preferences” --> 选择“Query Results”下的“SQL Editor”:勾选“Treat BINARY/VARBINARY as nonbinary string”

    重新启动 MySQL WorkBench。

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

【讨论】:

有趣的是,这比得分最高的答案有多相似,而且比得分高:-p @Johny19 :我认为由于“SUBSTRING”的示例而被赞成。 不是BLOB<COLUMN_NAME>,而是<BLOB_COLUMN_NAME>【参考方案4】:

强制转换有效,但很痛苦,因此我建议使用 spioter 的方法,除非您使用大量真正的 blob 数据。

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

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

【讨论】:

我不知道这是否是强制转换的结果,但我完全按照您的建议进行了操作,并且没有出现新行。我只有一行很长的文字。无论如何,它满足了我的需要。 这其实是 MySQL 工作台,如果你右键单击,在弹出窗口中查看,它会正确显示...是的,它很烦人。【参考方案5】:
select CONVERT((column_name) USING utf8) FROM table;

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

【讨论】:

在 MacOS Mojave 上的 8.0.19 版中工作得非常好。 这可能应该是最佳答案(接受的答案没有错!)。使用最佳答案,由于某种原因,某些列仍未转换。但此方法适用于 db_access 的所有列和形式,并且不需要更改设置。【参考方案6】:

恐怕似乎不可能,它被列为工作台中的一个错误: http://bugs.mysql.com/bug.php?id=50692 不过它会非常有用!

【讨论】:

这不再是正确的答案(自 5.2.22 起)。请参阅下面的 spioter 的答案。【参考方案7】:

遇到同样的问题,根据the MySQL documentation,可以选择一个BLOB的子串:

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

HTH,滑溜溜

【讨论】:

【参考方案8】:

我将其他一些帖子拼凑在一起,因为工作台“首选项”修复对我不起作用。 (世行 6.3)

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

【讨论】:

【参考方案9】:

工作台 6.3 关注高分答案,然后使用UNCOMPRESS()

(简而言之: 1. 转到编辑 > 首选项 2. 选择 SQL 编辑器 3. 在 SQL Execution 下,勾选 Treat BINARY/VARBINARY as nonbinary string 4. 重启 MySQL Workbench(不会提示或通知您此要求。)

然后

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

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

如果您只是输入UNCOMPRESS(&lt;COLUMN_NAME&gt;),您可以右键单击blob,然后单击“在编辑器中打开值”。

【讨论】:

这个答案应该解释 when UNCOMPRESS 是合适的。虽然我从未使用过它,但根据 MySQL 文档,它仅适用于使用 COMPRESS 创建 BINARY 值的情况:“如果参数不是压缩值,则结果为 NULL。”【参考方案10】:

你可以做的事情很少

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/

【讨论】:

添加答案时,尤其是多年后,请说明为什么要添加另一个答案。 CSTobeymbunch 都已经表明 blob 字段可以是 CAST .. AS CHAR。我认为您在证明 CAST 有助于使 GROUP_CONCAT 正常工作?不幸的是,链接已损坏。顺便说一句,您的第二个代码示例有问题...【参考方案11】:

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

在这种情况下,目前没有编辑器偏好 - 尽管我有 submitted a feature request now - 请参阅该请求以获得更详细的解释。

[直到/除非实现该功能请求],解决方案是查询中的HEX 函数:SELECT HEX(mybinarycolumn) FROM mytable


另一种方法是使用 phpMyAdmin 而不是 MySQL Workbench - 默认显示十六进制。

【讨论】:

谢谢史蒂夫,这正是我想要的。希望他们在工作台中添加该选项。【参考方案12】:

SELECT *, CONVERT( UNCOMPRESS(column) USING "utf8" ) AS column FROM table_name

【讨论】:

以上是关于如何在 MySQL Workbench 中直接查看 blob的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mysql Workbench GUI 中查看表格内容?

如何在MySql Workbench中查看模型的所有现有元素?

如何用MySQL workbench查询数据

如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询

Mac的mysql和workbench连接问题解决

MySQL Workbench 字符集