Jak najlepiej wyświetlić w terminalu a MySQL SELECT zwracając zbyt wiele pól?

Używam PuTTY do uruchomienia:

mysql> SELECT * FROM sometable;

sometable ma wiele pól i powoduje to, że wiele kolumn próbuje być wyświetlane w terminalu. Pola zawijają się na następny wiersz, więc bardzo trudno jest wyrównać tytuły kolumn wartościami pól.

Jakie są rozwiązania do przeglądania takich danych w terminalu?

Nie mam ani nie chcę dostępu do phpMyAdmin - lub innych interfejsów GUI. Szukam rozwiązań z linii poleceń takich jak ta: Save MySQL Wyniki zapytania do pliku tekstowego lub CVS

Author: Ronan Boiteau, 2009-05-29

11 answers

SELECT * FROM sometable\G

To zapytanie wyświetla wiersze w pionie, tak:

*************************** 1. row ***************************
             id: 1
 342
Author: Rytmis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-17 14:59:28

Możesz również uznać to za przydatne (tylko dla Windows):

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

Spowoduje to przekierowanie wyjścia przez narzędzie linii poleceń less, Które-z tymi parametrami-da tabelaryczne wyjście, które można przewijać poziomo i pionowo za pomocą klawiszy kursora.

Opuść ten widok, naciskając klawisz q, który zakończy działanie narzędzia less.

 275
Author: Daniel Schneller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 08:54:33

Spróbuj włączyć tryb pionowy, używając \G do wykonania zapytania zamiast ;:

mysql> SELECT * FROM sometable \G

Twoje wyniki będą wyświetlane w trybie pionowym, więc każda wartość kolumny zostanie wydrukowana w osobnym wierszu. Wyjście będzie węższe, ale oczywiście znacznie dłuższe.

 31
Author: Swiety,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 19:57:15

Możesz użyć opcji --table lub -t, która wyświetli ładny zestaw wyników

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

Lub inną metodą przekazywania zapytania do mysql, np.:

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

Wyjście:

+--------------+--------------+------+-----+---------+----------------+
| 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    |                |
+--------------+--------------+------+-----+---------+----------------+
 21
Author: davidmh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 18:00:13

Użycie mysql ' S ego polecenie

From mysql'S help command:

Ego (\G) wysyła polecenie na serwer mysql, wyświetla wynik w pionie.

Więc dodając \G do twojego select, możesz uzyskać bardzo czyste wyjście pionowe:

mysql> SELECT * FROM sometable \G;

Używanie pagera

Możesz powiedzieć MySQL, aby używać pagera less z opcją -S, która odcina szerokie linie i daje wyjście, które można przewijać za pomocą strzałki klucze:

mysql> pager less -S

Tak więc, przy następnym uruchomieniu polecenia z szerokim wyjściem, MySQL pozwoli Ci przeglądać wyjście za pomocą less pager:

mysql> SELECT * FROM sometable;

Jeśli skończyłeś z pagerem i chcesz wrócić do zwykłego wyjścia na stdout, użyj tego:

mysql> nopager
 9
Author: Ronan Boiteau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-16 18:39:01

Domyślnym pagerem jest stdout. Stdout ma ograniczenie kolumny, więc wyjście zostanie zawinięte. Możesz ustawić inne narzędzia jako pager, aby sformatować wyjście. Są dwie metody. Jednym z nich jest ograniczenie kolumny, drugim przetworzenie jej w Vimie.

Pierwsza metoda:

➜  ~  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>

Wyjście nie jest kompletne. Zawartość pasuje do ekranu.

Drugi:

Ustaw tryb Vima na nowrap w Twoim .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
+-----------+------------+------------+-------------+-------------+----------
~
~
~
 6
Author: hyang0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 08:42:03

Aby uzupełnić odpowiedź, którą uznałem za najlepszą, używam również less -SFX, ale w inny sposób: lubię ją reklamować do mojego pliku .my.cnf w moim folderze domowym, przykładowy plik cnf wygląda tak:

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

Dobrą rzeczą jest to, że less jest używana tylko wtedy, gdy wyjście zapytania ma więcej niż jedną stronę, oto wyjaśnienie wszystkich flag:

  • -S: pojedyncza linia, nie pomijaj linii, gdy linia jest szersza niż ekran, zamiast tego pozwól na przewinięcie do racja.
  • -F: Zakończ, jeśli jeden ekran, Jeśli zawartość nie wymaga przewijania, po prostu wyślij na stdout.
  • -X: No init, wyłącza wyjście" less", które mogło być skonfigurowane do wyjścia przy każdym załadowaniu.

Uwaga: w pliku .my.cnf nie umieszczaj komendy pager poniżej słowa kluczowego [client]; chociaż może to działać z mysql cóż, mysqldump będzie narzekać, że go nie rozpoznasz.

 2
Author: santiago arizti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-12 15:25:26

Jeśli używasz MySQL interaktywnie, możesz ustawić pager używać sed w następujący sposób:

$ 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"

Jeśli nie używasz sed jako pagera, wynik jest taki:

"blah":"blah","blah":"blah","blah":"blah"
 1
Author: Paul Ericson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 16:16:21

Uważam, że putty ma maksymalną liczbę kolumn, którą można określić dla okna.

Dla Windows osobiście używam Windows PowerShell i ustawiam szerokość bufora ekranu dość wysoko. Szerokość kolumny pozostaje stała i można użyć poziomego paska przewijania, aby wyświetlić dane. Miałem ten sam problem, co Ty.

Edit: dla zdalnych hostów, do których musisz SSH użyć czegoś takiego jak plink + Windows PowerShell

 0
Author: Patrick Gryciuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-29 07:27:55

Możesz użyć tee aby zapisać wynik zapytania do pliku:

tee somepath\filename.txt
 0
Author: Sathishkumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-17 14:47:03

Za pomocą wiersza polecenia Windows możesz zwiększyć rozmiar bufora okna tak, jak chcesz zobaczyć liczbę kolumn. Zależy to od liczby kolumn w tabeli.

 0
Author: Sathishkumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 13:51:43