mysql - 如何让 mysql 命令行客户端不在选择中打印 blob 字段 *

标签 mysql blob

探索一些具有 blob 字段的表。如何使用命令行客户端执行 select * 并让它抑制 blob 字段的打印(或截断为标准字段宽度)而不是在屏幕上滚动一堆二进制垃圾?这是 mysql 5.1 客户端。只想做一个选择 * 而不是单独列出所有非 blob 字段,用于开发。

最佳答案

这可以在 MySQL 中本地执行,但它非常笨重:

SET @sql=CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
    INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='test' 
    AND DATA_TYPE!='blob'), ' FROM test.test');
PREPARE preparedsql FROM @sql;
EXECUTE preparedsql;
DEALLOCATE PREPARE preparedsql;

我通常更喜欢 BASH 别名/函数而不是 MySQL 过程,因为它们在系统之间更容易传输:

function blobless()
{
  cols=''
  _ifs=$IFS
  IFS=$(echo -en "\n\b")
  for col in $(mysql --skip-column-names -e "SELECT COLUMN_NAME FROM 
      INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$1' AND TABLE_NAME='$2' 
      AND DATA_TYPE NOT LIKE '%blob'"); do 
    cols="$cols,$col"
  done
  IFS=$_ifs
  mysql -e "SELECT $(echo $cols | cut -c2-) FROM $1.$2 $3"
}

像这样调用:

[andy ~]# blobless test test "where id>0"
+----+--------+
| id | t      |
+----+--------+
|  1 | 123    |
|  2 | 124213 |
+----+--------+

如果您在 MySQL 客户端控制台中,请使用 Ctrl-Z 暂停程序并进入 shell。然后使用 blobless db table 检查 blobless 数据。 fg 将暂停的作业(即 MySQL 客户端)恢复到前台。

您可以在 ~/.my.cnf ( howto ) 中设置默认的 MySQL 连接详细信息,以避免您必须在命令行上提供主机/用户/密码 - 这也将被使用通过 BASH 函数。

关于mysql - 如何让 mysql 命令行客户端不在选择中打印 blob 字段 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3826030/

相关文章:

mysql - 在 WHILE 循环中 INSERT 未插入数据库

paramiko - 在后台运行mysql命令

python - 在 Python 中提取特定列并将其从字典中分组

mysql - CHAR(0) 允许在 mysql 中插入所有长度的值

python - 如何通过 .py 运行 blob 数据传输

javascript - 如何将 Blob(八位字节流)读取为 JSON 对象?

java - 在没有游标的情况下访问 Android Sqlite 中的大 BLOB

c# - 使用C#从数据库中读取图像?

javascript - JavaScript Blob 对象什么时候被垃圾回收?

mysql - 如何替换特定表中特定字段中的所有 NULL 值?