Как лучше всего отображать в терминале A 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
' sego
командаС
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