una por lista ingresar entrar desde datos crear consola como comandos mysql command-line select putty

por - ¿Cómo mostrar mejor en Terminal un MySQL SELECT devolviendo demasiados campos?



ingresar a mysql por consola linux (11)

Estoy usando PuTTY para correr:

mysql> SELECT * FROM sometable;

sometable tiene muchos campos y esto da como resultado que se muestren muchas columnas en el terminal. Los campos se ajustan a la siguiente línea, por lo que es muy difícil alinear los títulos de las columnas con los valores de los campos.

¿Qué soluciones hay para ver tales datos en el terminal?

No tengo ni quiero acceder a phpMyAdmin ni a ninguna otra interfaz GUI. Estoy buscando soluciones de línea de comandos como esta: Guardar los resultados de MySQL Query en texto o archivo CVS


Usando el comando del ego mysql

Del comando de help mysql :

ego (/ G) Enviar comando al servidor mysql, mostrar el resultado verticalmente.

Entonces, al agregar un /G a su select , puede obtener una salida vertical muy limpia:

mysql> SELECT * FROM sometable /G;

Utilizando un buscapersonas

Puede decirle a MySQL que use el paginador less con su opción -S que corta líneas anchas y le da una salida que puede desplazarse con las teclas de flecha:

mysql> pager less -S

Por lo tanto, la próxima vez que ejecute un comando con una salida amplia, MySQL le permitirá navegar por la salida con less buscapersonas:

mysql> SELECT * FROM sometable;

Si ha terminado con el buscapersonas y desea volver a la salida normal en la salida stdout , use esto:

mysql> nopager


Creo que la masilla tiene un número máximo de columnas que puede especificar para la ventana.

Para Windows, personalmente uso Windows PowerShell y establezco el ancho del búfer de pantalla razonablemente alto. El ancho de la columna permanece fijo y puede usar una barra de desplazamiento horizontal para ver los datos. Tuve el mismo problema que tienes ahora.

edición: para los hosts remotos que tiene que SSH en usted usaría algo como plink + Windows PowerShell


El paginador predeterminado es stdout. El stdout tiene la limitación de la columna, por lo que la salida se ajustaría. Puede configurar otras herramientas como buscapersonas para formatear la salida. Hay dos métodos. Una es limitar la columna, la otra es procesarla en vim.

El primer 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>

La salida no está completa. El contenido se ajusta a tu pantalla.

El segundo:

Configura el modo vim para que se ajuste en tu .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 +-----------+------------+------------+-------------+-------------+---------- ~ ~ ~


Intente habilitar el modo vertical, usando /G para ejecutar la consulta en lugar de ; :

mysql> SELECT * FROM sometable /G

Sus resultados se mostrarán en el modo vertical, por lo que cada valor de columna se imprimirá en una línea separada. La salida será más estrecha pero obviamente mucho más larga.


Puede usar tee para escribir el resultado de su consulta en un archivo:

tee somepath/filename.txt


Puede usar la opción --table o -t , que generará un conjunto de resultados con buen aspecto

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

o algún otro método para pasar una consulta a mysql, como:

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

salida:

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


Si está utilizando MySQL de forma interactiva, puede configurar su buscapersonas para que use sed siguiente manera:

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

Si no usas sed como el buscapersonas, la salida es así:

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


Solo para complementar la respuesta que pensé mejor, también uso less -SFX pero de una manera diferente: me gusta less -SFX a mi archivo .my.cnf en mi carpeta de inicio, un ejemplo de archivo cnf se ve así:

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

Lo bueno de tenerlo de esta manera, es que solo se usa less cuando el resultado de una consulta es en realidad más de una página, aquí está la explicación de todas las banderas:

  • -S: Una línea, no salte la línea cuando la línea es más ancha que la pantalla, en lugar de eso, permita que se desplace hacia la derecha.
  • -F: Salir si hay una pantalla , si el contenido no necesita desplazamiento, simplemente envíelo a la salida estándar.
  • -X: no init, desactiva cualquier salida que "menos" se haya configurado para que salga cada vez que se carga.

Nota: en el archivo .my.cnf no coloque el comando pager debajo de la palabra clave [client] ; aunque podría funcionar bien con mysql , mysqldump se quejará por no reconocerlo.


También puede encontrar esto útil (solo para Windows):

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

Esto canalizará la salida a través de la herramienta de línea de comando less que, con estos parámetros, le proporcionará una salida tabular que se puede desplazar horizontal y verticalmente con las teclas del cursor.

Salga de esta vista presionando la tecla q , que cerrará la herramienta less .


Usando el símbolo del sistema de Windows, puede aumentar el tamaño del búfer de la ventana tanto como desee para ver el número de columnas. Esto depende del no de columnas en la tabla.


SELECT * FROM sometable/G

Esta consulta muestra las filas verticalmente, así:

*************************** 1. row *************************** id: 1