Domanda

PuTTY per eseguire:

mysql> SELECT * FROM sometable;

sometable ha molti campi e questo si traduce in molte colonne che cercano di essere visualizzati nel terminale. I campi avvolgono sulla riga successiva, quindi è molto difficile allineare titoli delle colonne con i valori di campo.

Quali soluzioni ci sono per la visualizzazione di tali dati nel terminale?

Non ho né voglio l'accesso a phpMyAdmin - o di qualsiasi altra interfaccia GUI. Sto cercando le soluzioni della riga di comando come questo: Salva MySQL Query si traduce in file di testo o CVS

È stato utile?

Soluzione

Termina la query con \G al posto di ;. Ad esempio:

SELECT * FROM sometable\G

Questa query mostra le righe verticalmente, in questo modo:

*************************** 1. row ***************************
                 Host: localhost
                   Db: mydatabase1
                 User: myuser1
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          ...
*************************** 2. row ***************************
                 Host: localhost
                   Db: mydatabase2
                 User: myuser2
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          ...

Altri suggerimenti

Si potrebbe anche trovare questo utile (non solo Windows):

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

Questo tubo volontà outut attraverso la linea di comando less che - con questi parametri - darà un output tabulare che può essere fatto scorrere orizzontalmente e verticalmente con i tasti cursore

.

Lascia questo punto di vista premendo il tasto q, che chiudere lo strumento less.

Prova ad attivare la modalità verticale, utilizzando \G per eseguire la query anziché ;:

mysql> SELECT * FROM sometable \G

I risultati verranno elencati in modo verticale, così ogni valore di colonna saranno stampati su una linea separata. L'uscita sarà più ristretto ma ovviamente molto più a lungo.

È possibile utilizzare l'opzione --table o -t, che sarà in uscita un bel guardare insieme di risultati

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

o qualche altro metodo per passare una query mysql, come:

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

uscita:

+--------------+--------------+------+-----+---------+----------------+
| 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    |                |
+--------------+--------------+------+-----+---------+----------------+

Comando mysql Uso del ego

Dalla comando mysql di help:

  

Io (\ G) Invia comando per server MySQL, risultato display verticalmente.

Quindi, aggiungendo un \G al vostro select, è possibile ottenere un'uscita verticale molto pulito:

mysql> SELECT * FROM sometable \G;

Utilizzo di un pager

Si può dire a MySQL di utilizzare il cercapersone less con l'opzione -S che taglia le linee larghe e ti dà un output che è possibile scorrere con i tasti freccia:

mysql> pager less -S

Quindi, la prossima volta che si esegue un comando con un ampio uscita, MySQL vi permetterà di navigare l'uscita con il cercapersone less:

mysql> SELECT * FROM sometable;

Se hai finito con il cercapersone e vuole tornare alla uscita regolare su stdout, utilizzare questo:

mysql> nopager

Il pager di default è stdout. Lo stdout ha la limitazione colonna, quindi l'uscita verrebbe avvolto. È possibile impostare altri strumenti come cercapersone per formattare l'output. Ci sono due metodi. Uno è quello di limitare la colonna, l'altra è per elaborati in vim.

Il primo metodo:

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

L'uscita non è completa. Il contenuto si adatta al vostro schermo.

La seconda:

Impostare la modalità vim per NOWRAP nel vostro .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
+-----------+------------+------------+-------------+-------------+----------
~
~
~

Proprio per completare la risposta che ho pensato meglio, io uso anche less -SFX, ma in un modo diverso: mi piace annuncio al mio file .my.cnf nella mia cartella home, un file CNF esempio si presenta così:

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

La cosa buona di avere in questo modo, è che less viene utilizzato solo quando l'output di una query è in realtà più di una pagina lunga, ecco la spiegazione di tutte le bandiere:

  • -S:. Singola linea, non saltare la linea quando la linea è più ampia dello schermo, invece permette di scorrere a destra
  • -F:. Esci se uno schermo , se il contenuto non ha bisogno di scorrimento poi basta inviare allo stdout
  • -X:. No init, disabilita qualsiasi uscita "meno" potrebbe essere configurato per l'uscita ogni volta che si carica

Nota: nel file .my.cnf non mettere il comando pager sotto la parola chiave [client]; anche se potrebbe funzionare con mysql bene, mysqldump si lamenterà di non riconoscerlo.

Se si sta utilizzando MySQL in modo interattivo, è possibile impostare il cercapersone per usare sed in questo modo:

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

Se non si utilizza sed come il cercapersone, l'output è in questo modo:

"blah":"blah","blah":"blah","blah":"blah"

ho scritto pspg - https://github.com/okbob/pspg

Questa pager è stato progettato per i dati tabulari -. E MySQL è supportato troppo

MariaDB [sakila]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen
PAGER set to 'pspg -s 14 -X --force-uniborder --quit-if-one-screen'
MariaDB [sakila]> select now();
MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100;

Credo stucco ha un numero massimo di colonne è possibile specificare per la finestra.

Per Windows Io personalmente uso di Windows PowerShell e impostare la larghezza buffer dello schermo ragionevolmente alto. La larghezza della colonna rimane fisso ed è possibile utilizzare una barra di scorrimento orizzontale per visualizzare i dati. Ho avuto lo stesso problema che stai avendo ora.

modifica: Per gli host remoti che si devono SSH si può usare qualcosa di simile a Plink + Windows PowerShell

È possibile utilizzare tee per scrivere il risultato della query in un file:

tee somepath\filename.txt

Utilizzo del comando di Windows Prompt è possibile aumentare la dimensione del buffer della finestra tanto si desidera visualizzare il numero di colonne. Questo dipende il no di colonne nella tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top