【问题标题】:How can I directly view blobs in MySQL Workbench如何在 MySQL Workbench 中直接查看 blob
【发布时间】: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 - 默认显示十六进制。)

标签: mysql mysql-workbench


【解决方案1】:

简而言之:

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

在 MySQL Workbench 6.0+ 中

  1. 转到编辑 > 首选项
  2. 选择 SQL 查询
  3. 查询结果下,勾选Treat BINARY/VARBINARY as nonbinary string
  4. 重启 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】:

执行三个步骤:

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

  2. 重新启动 MySQL WorkBench。

  3. 现在选择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

      【讨论】:

        猜你喜欢
        • 2021-08-09
        • 2014-07-28
        • 1970-01-01
        • 2013-09-09
        • 2011-06-15
        • 1970-01-01
        • 2015-03-18
        • 2018-02-08
        • 1970-01-01
        相关资源
        最近更新 更多