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


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

mysql> SELECT * FROM sometable;

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

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

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

11 188

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, показывает результат вертикально.

Итак, добавив a \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.cnf файл в моей домашней папке, пример файла cnf выглядит так:

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

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

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

Примечание:.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 вы можете увеличить размер буфера окна столько, сколько вы хотите видеть количество столбцов. Это зависит от отсутствия столбцов в таблице.