Как лучше всего отобразить в терминале MySQL SELECT, возвращая слишком много полей?

Я использую PuTTY для запуска:

mysql> SELECT * FROM sometable;

sometable есть много полей, и это приводит к тому, что многие столбцы пытаются отобразиться в терминале. Поля переносятся на следующую строку, поэтому очень трудно выровнять заголовки столбцов со значениями полей.

Какие есть решения для просмотра таких данных в терминале?

У меня нет ни доступа к phpMyAdmin, ни к любым другим интерфейсам GUI. Я ищу решения командной строки, такие как это: Сохранить результаты MySQL Query в текстовый файл или файл CVS

Ответ 1

SELECT * FROM sometable\G

Этот запрос отображает строки по вертикали, например:

*************************** 1. row ***************************
             id: 1

Ответ 2

Вы также можете найти это полезным (не только для Windows):

mysql> pager less -SFX
mysql> SELECT * FROM sometable;

Это будет транслировать выход через инструмент командной строки less, который с этими параметрами даст вам табличный вывод, который можно прокручивать по горизонтали и вертикали с помощью клавиш курсора.

Оставьте это представление, нажав клавишу q, которая выйдет из инструмента less.

Ответ 3

Попробуйте включить вертикальный режим, используя \G для выполнения запроса вместо ;:

mysql> SELECT * FROM sometable \G

Ваши результаты будут указаны в вертикальном режиме, поэтому каждое значение столбца будет напечатано на отдельной строке. Выход будет более узким, но, очевидно, намного дольше.

Ответ 4

Вы можете использовать опцию --table или -t, которая выведет красивый набор результатов

echo 'desc table_name' | mysql -uroot database -t

или какой-либо другой метод для передачи запроса в mysql, например:

mysql -uroot table_name --table < /tmp/somequery.sql

выход:

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| username     | varchar(30)  | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(30)  | NO   |     | NULL    |                |
| email        | varchar(75)  | NO   |     | NULL    |                |
| password     | varchar(128) | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| last_login   | datetime     | NO   |     | NULL    |                |
| date_joined  | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

Ответ 5

Использование команды mysql ego

Из команды help mysql:

ego (\ G) Отправить команду на сервер MySQL, отобразить результат по вертикали.

Таким образом, добавив \G к вашему select, вы можете получить очень чистый вертикальный вывод:

mysql> SELECT * FROM sometable \G;

Используя пейджер

Вы можете указать MySQL использовать less пейджер с его -S которая -S широкие строки и дает вывод, который вы можете прокручивать с помощью клавиш со стрелками:

mysql> pager less -S

Таким образом, в следующий раз, когда вы запустите команду с широким выводом, MySQL позволит вам просмотреть вывод с less пейджеров:

mysql> SELECT * FROM sometable;

Если вы сделали с пейджером и хотите вернуться к обычному выходу на stdout, используйте:

mysql> nopager

Ответ 6

Пейджер по умолчанию - stdout. У stdout есть ограничение по столбцу, поэтому вывод будет завернут. Вы можете установить другие инструменты в качестве пейджера для форматирования вывода. Существует два метода. Один из них - ограничить столбец, другой - обработать его в vim.

Первый метод:

➜  ~  echo $COLUMNS
179

mysql> nopager
PAGER set to stdout
mysql> pager cut -c -179
PAGER set to 'cut -c -179'
mysql> select * from db;
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
| Host      | Db         | User       | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv |
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
| %         | test       |            | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| %         | test\_%    |            | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| localhost | phpmyadmin | phpmyadmin | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| localhost | it         | it         | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
4 rows in set (0.00 sec)

mysql>

Выход не завершен. Содержимое соответствует вашему экрану.

Второй:

Установите vim режим для вставки в ваш .vimrc

➜  ~  tail ~/.vimrc

" no-wrap for myslq cli
set nowrap

mysql> pager vim -
PAGER set to 'vim -'
mysql> select * from db;
    Vim: Reading from stdin...
+-----------+------------+------------+-------------+-------------+----------
| Host      | Db         | User       | Select_priv | Insert_priv | Update_pr
+-----------+------------+------------+-------------+-------------+----------
| %         | test       |            | Y           | Y           | Y
| %         | test\_%    |            | Y           | Y           | Y
| localhost | phpmyadmin | phpmyadmin | Y           | Y           | Y
| localhost | it         | it         | Y           | Y           | Y
+-----------+------------+------------+-------------+-------------+----------
~
~
~

Ответ 7

Если вы используете MySQL в интерактивном режиме, вы можете настроить пейджер на использование sed следующим образом:

$ mysql -u <user> p<password>
mysql> pager sed 's/,/\n/g' 
PAGER set to 'sed 's/,/\n/g''
mysql> SELECT blah FROM blah WHERE blah = blah 
.
.
.
"blah":"blah"
"blah":"blah"
"blah":"blah"

Если вы не используете sed в качестве пейджера, вывод будет таким:

"blah":"blah","blah":"blah","blah":"blah"

Ответ 8

Чтобы дополнить ответ, который я считал лучшим, я также использую less -SFX, но по-другому: мне нравится объявлять его в свой .my.cnf файл в моей домашней папке, пример cnf файла выглядит следующим образом:

[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'

Хорошо, что он имеет такой способ, заключается в том, что less используется только тогда, когда вывод запроса на самом деле более одной страницы длиннее, вот объяснение всех флагов:

  • -S: Одиночная строка, не пропускайте строку, когда линия шире экрана, а позволяет прокручивать вправо.
  • -F: Выйти, если на одном экране, если содержимое не нуждается в прокрутке, а затем просто отправьте на стандартный вывод.
  • -X: нет init, отключает любой вывод "less", который может быть настроен для вывода каждый раз при загрузке.

Примечание: в файле .my.cnf не ставьте команду pager ниже ключевого слова [client]; хотя он может работать с mysql хорошо, mysqldump будет жаловаться на то, что он не распознает его.

Ответ 9

Я считаю, что у putty есть максимальное количество столбцов, которые вы можете указать для окна.

В Windows я лично использую Windows PowerShell и достаточно сильно устанавливаю ширину буфера экрана. Ширина столбца остается фиксированной, и вы можете использовать горизонтальную полосу прокрутки для просмотра данных. У меня была та же проблема, что и сейчас.

edit: для удаленных хостов, которые у вас есть для SSH, вы будете использовать что-то вроде plink + Windows PowerShell

Ответ 10

Вы можете использовать tee чтобы записать результат вашего запроса в файл:

tee somepath\filename.txt

Ответ 11

Используя командную строку Windows, вы можете увеличить размер буфера окна, насколько вы хотите видеть количество столбцов. Это зависит от количества столбцов в таблице.

Ответ 12

Я написал pspg - https://github.com/okbob/pspg

Этот пейджер предназначен для табличных данных - и MySQL также поддерживается.

MariaDB [sakila]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen
PAGER set to 'pspg -s 14 -X --force-uniborder --quit-if-one-screen'
MariaDB [sakila]> select now();
MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100;