Как лучше всего отображать в терминале 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
с помощью командной строки Windows вы можете увеличить размер буфера окна столько, сколько вы хотите увидеть количество столбцов. Это зависит от no столбцов в таблице.