Pergunta

Eu estou usando PuTTY para executar:

mysql> SELECT * FROM sometable;

sometable tem muitos campos e isso resulta em muitas colunas tentando ser exibido no terminal. O envoltório campos para a próxima linha por isso é muito difícil de alinhar títulos das colunas com valores de campo.

Que soluções estão lá para ver esses dados no terminal?

Eu não tenho nem querem ter acesso a phpMyAdmin - ou quaisquer outras interfaces GUI. Estou à procura de soluções de linha de comando como este: resultados Guardar MySQL consulta em texto ou CVS arquivo

Foi útil?

Solução

Terminar a consulta com \G no lugar de ;. Por exemplo:

SELECT * FROM sometable\G

Essa consulta exibe as linhas na vertical, como este:

*************************** 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
          ...

Outras dicas

Você também pode encontrar este útil (não somente para Windows):

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

Este tubo vontade outut através da ferramenta de linha de comando less que - com esses parâmetros -. Vai lhe dar uma saída tabular que pode ser rolada horizontalmente e verticalmente com as teclas do cursor

Deixe este ponto de vista pressionando a tecla q, que vai encerrar a ferramenta less.

Tente ativar o modo vertical, utilizando \G para executar a consulta em vez de ;:

mysql> SELECT * FROM sometable \G

Os seus resultados serão listados no modo vertical, de modo que cada valor de coluna serão impressos numa linha separada. A saída será mais estreito, mas, obviamente, muito mais tempo.

Você pode usar a opção --table ou -t, que a saída de um olhando agradável conjunto de resultados vontade

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

ou algum outro método para passar uma consulta para mysql, como:

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

saída:

+--------------+--------------+------+-----+---------+----------------+
| 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 Usando de ego

De comando mysql de help:

ego (\ G) Enviar comando para servidor mysql, resultado apresentado na vertical.

Assim, anexando um \G ao seu select, você pode obter uma saída vertical muito limpo:

mysql> SELECT * FROM sometable \G;

Usando um pager

Você pode dizer ao MySQL para usar o pager less com a sua opção -S que corta linhas largas e dá-lhe uma saída que pode deslocar-se com as teclas de setas:

mysql> pager less -S

Assim, da próxima vez que você executar um comando com uma saída de largura, MySQL permitirá que você navegue a saída com o pager less:

mysql> SELECT * FROM sometable;

Se você é feito com o pager e quero voltar para a saída regular sobre stdout, use o seguinte:

mysql> nopager

O pager padrão é stdout. A saída padrão tem a limitação da coluna, de modo que a saída seria enrolado. Você pode definir outras ferramentas como pager para formatar a saída. Existem dois métodos. Uma é a de limitar a coluna, o outro é para a processou no vim.

O primeiro método:

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

A saída não está completa. Os ajustes de conteúdo para sua tela.

O segundo:

Set vim para o modo de nowrap em seu .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
+-----------+------------+------------+-------------+-------------+----------
~
~
~

Apenas para complementar a resposta que eu pensei melhor, eu também uso less -SFX mas de uma maneira diferente: Eu gosto de ad-lo para o meu arquivo .my.cnf na minha pasta pessoal, um exemplo CNF olhares de arquivo como este:

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

A boa coisa sobre ter isto deste modo, é que less só é usado quando a saída de uma consulta é na verdade mais de uma página, aqui está a explicação de todas as bandeiras:

  • -S:. Única linha, não pule linha quando a linha é maior do que a tela, em vez permitem deslocar para a direita
  • F:. Sair se uma tela , se o conteúdo não precisa de rolagem em seguida, basta enviar para stdout
  • X: No init, desativa qualquer saída "menos" pode ter configurado para a saída cada vez que ele carrega
  • .

Nota: no arquivo .my.cnf não colocar o comando pager abaixo a palavra-chave [client]; embora possa trabalhar com mysql bem, mysqldump vai se queixam de não reconhecê-lo.

Se você estiver usando MySQL interativamente, você pode definir o seu pager para uso sed assim:

$ 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 você não usar sed como o pager, a saída é assim:

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

Eu escrevi pspg - https://github.com/okbob/pspg

Este pager é projetado para dados tabulares -. E MySQL é suportado demasiado

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;

Eu acredito massa tem um número máximo de colunas que você pode especificar para a janela.

Para o Windows eu, pessoalmente, usa o Windows PowerShell e definir tampão largura razoavelmente alto da tela. A coluna largura permanece fixo e você pode usar a barra de rolagem horizontal para ver os dados. Eu tive o mesmo problema que você está tendo agora.

edit: Para hosts remotos que você tem que SSH para você usaria algo como plink + Windows PowerShell

Você pode usar tee para escrever o resultado de sua consulta para um arquivo:

tee somepath\filename.txt

Usando o comando do Windows solicitar que você pode aumentar o tamanho do buffer da janela tanto que você quer ver o número de colunas. Isso depende do nº de colunas na tabela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top