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

Я использую шпаклевка запуск:

mysql> SELECT * FROM sometable;

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

какие решения существуют для просмотра таких данных в терминале?

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

11 ответов


SELECT * FROM sometable\G

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

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

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

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

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

оставьте этот вид, нажав q ключ, который ушел из .


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

mysql> SELECT * FROM sometable \G

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


можно использовать --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    |                |
+--------------+--------------+------+-----+---------+----------------+

используя mysql ' s ego команда

С mysql ' s :

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

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

mysql> SELECT * FROM sometable \G;

навигатор

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

mysql> pager less -S

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

mysql> SELECT * FROM sometable;

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

mysql> nopager

пейджер по умолчанию-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 в nowrap в вашем .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
+-----------+------------+------------+-------------+-------------+----------
~
~
~

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

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

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

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

Примечание:.my.cnf файл не ставьте


если вы используете 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"

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

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

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


можно использовать tee записать результат запроса в файл:

tee somepath\filename.txt

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