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