如何让mysql命令行客户端不打印select中的blob字段*
探索一些具有blob字段的表。如何使用命令行客户端执行如何让mysql命令行客户端不打印select中的blob字段*,mysql,blob,Mysql,Blob,探索一些具有blob字段的表。如何使用命令行客户端执行select*,并使其优于打印(或截断为标准字段宽度)blob字段,而不是在屏幕上滚动一堆二进制垃圾?这是mysql 5.1客户端的一个例子。只需执行select*操作,而不是单独列出所有非blob字段即可进行开发。这可以在MySQL中以本机方式执行,但它相当笨拙: SET @sql=CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA
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;
与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"
}
这样调用:
[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
()中设置默认的MySQL连接详细信息,以避免您必须在命令行上提供host/user/pass,这也将被BASH函数使用。研究这个相关问题:不完全是您要查找的,但它允许排除特定列,甚至可以使用信息模式库自动排除BLOB字段。这些都不是真正的目标,但我想我可以编写一个存储过程,使用元数据动态生成查询并忽略或截断博客。似乎需要扩展语句语法,以便从表中选择*除了blob_列等。第一种查询构造很酷,但我也同样处理了“blobless()”解决方案提供的问题