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
11 answers
SELECT * FROM sometable\G
To zapytanie wyświetla wiersze w pionie, tak:
*************************** 1. row ***************************
id: 1
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
.
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.
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 | |
+--------------+--------------+------+-----+---------+----------------+
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
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
+-----------+------------+------------+-------------+-------------+----------
~
~
~
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.
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"
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
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
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.
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