как заставить клиента командной строки mysql не печатать поля blob в select * - PullRequest
11 голосов
/ 30 сентября 2010

Изучение некоторых таблиц, которые имеют поля BLOB-объектов.Как я мог сделать select * с клиентом командной строки и заставить его превышать печать (или усечение до стандартной ширины поля) полей больших двоичных объектов, а не прокручивать кучу двоичного мусора на экране?Это с клиентом MySQL 5.1.Просто хочу сделать выбор * и не перечислять все неблобные поля по отдельности, для разработки.

1 Ответ

3 голосов
/ 30 сентября 2010

Это может быть выполнено изначально в 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, чтобы приостановить программу и перейти в оболочку.Затем используйте blobless db table, чтобы проверить эти данные.fg восстановит приостановленное задание (т.е. клиент MySQL) на передний план.

Вы можете установить детали подключения MySQL по умолчанию в ~/.my.cnf ( howto ), чтобы избавить вас от необходимости указывать host / user / pass в командной строке - это также будет использоваться функциями BASH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...