如何在 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(<COLUMN_NAME>)
,您可以右键单击blob,然后单击“在编辑器中打开值”。
【讨论】:
这个答案应该解释 whenUNCOMPRESS
是合适的。虽然我从未使用过它,但根据 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/
【讨论】:
添加答案时,尤其是多年后,请说明为什么要添加另一个答案。CSTobey
和 mbunch
都已经表明 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中查看模型的所有现有元素?