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