如何让mysql命令行客户端不要在select*中打印blob字段

tri*_*bes 11 mysql blob

探索一些具有blob字段的表.我怎样才能select *使用命令行客户端并让它压缩blob字段的打印(或截断到标准字段宽度)而不是在屏幕上滚动一堆二进制垃圾?这是与mysql 5.1客户端.只是想做一个select*而不是单独列出所有非blob字段,以便进行开发.

And*_*ndy 3

这可以在 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;
Run Code Online (Sandbox Code Playgroud)

与 MySQL 过程相比,我通常更喜欢 BASH 别名/函数,因为它们在系统之间更易于传输:

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"
}
Run Code Online (Sandbox Code Playgroud)

像这样调用:

[andy ~]# blobless test test "where id>0"
+----+--------+
| id | t      |
+----+--------+
|  1 | 123    |
|  2 | 124213 |
+----+--------+
Run Code Online (Sandbox Code Playgroud)

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

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