Изучение некоторых таблиц с полями blob. Как я могу сделать select *
с клиентом командной строки и заставить его сбрасывать печать (или обрезать до стандартной ширины поля) поля blob, а не прокручивать кучу бинарного мусора на экране? Это с клиентом mysql 5.1. Просто хочу сделать select * и не перечислить все поля non-blob отдельно для разработки.
Как заставить клиента командной строки mysql не печатать поля blob в select *
Ответ 1
Это может быть выполнено изначально в 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 aliases/function для процедур 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
для приостановки программы и перехода к оболочке. Затем используйте blobless db table
, чтобы проверить, что нечеткие данные. fg
вернет приостановленное задание (то есть клиент MySQL) на передний план.
Вы можете установить данные о соединении MySQL по умолчанию в ~/.my.cnf
(howto), чтобы сохранить вас, чтобы предоставить хост/пользователь/передать команду line - это также будет использоваться функциями BASH.