[mysql] 너무 많은 필드를 반환하는 MySQL SELECT를 터미널에 가장 잘 표시하는 방법은 무엇입니까?
PuTTY 를 사용 하여 실행 중입니다.
mysql> SELECT * FROM sometable;
sometable
많은 필드가 있으며 이로 인해 많은 열이 터미널에 표시됩니다. 필드는 다음 줄로 줄 바꿈되므로 열 제목을 필드 값으로 정렬하기가 매우 어렵습니다.
터미널에서 이러한 데이터를 볼 수있는 솔루션은 무엇입니까?
phpMyAdmin 또는 다른 GUI 인터페이스에 액세스하고 싶지 않습니다. 다음과 같은 명령 줄 솔루션을 찾고 있습니다. MySQL Query 결과를 텍스트 또는 CVS 파일로 저장
답변
\G
대신로 검색어를 종료하십시오 ;
. 예를 들면 다음과 같습니다.
SELECT * FROM sometable\G
이 쿼리는 다음과 같이 행을 세로로 표시합니다.
*************************** 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
...
답변
이 기능이 유용 할 수도 있습니다 (Windows 이외의 경우 만 해당).
mysql> pager less -SFX
mysql> SELECT * FROM sometable;
이렇게하면 less
명령 행 도구를 통해 출력을 파이프하고, 이 매개 변수를 사용하면 커서 키를 사용하여 가로 및 세로로 스크롤 할 수있는 테이블 형식 출력이 제공됩니다.
도구 q
를 종료 할 키를 누르면 이보기를 그대로 둡니다 less
.
답변
\G
다음 대신 쿼리를 실행 하여 수직 모드를 활성화하십시오 ;
.
mysql> SELECT * FROM sometable \G
결과는 세로 모드로 표시되므로 각 열 값이 별도의 줄에 인쇄됩니다. 출력은 더 좁지 만 분명히 더 길어질 것입니다.
답변
사용 mysql
의 ego
명령을
에서 mysql
의 help
명령
ego (\ G) mysql 서버에 명령을 보내고 결과를 세로로 표시합니다.
추가로 그래서 \G
당신을을 select
, 당신은 매우 깨끗 수직 출력을 얻을 수 있습니다 :
mysql> SELECT * FROM sometable \G
호출기 사용
MySQL에게 넓은 라인을 자르고 화살표 키로 스크롤 할 수있는 출력을 제공 less
하는 -S
옵션 과 함께 페이저 를 사용하도록 지시 할 수 있습니다.
mysql> pager less -S
따라서 다음에 넓은 출력으로 명령을 실행하면 MySQL에서 less
호출기로 출력을 찾아 볼 수 있습니다 .
mysql> SELECT * FROM sometable;
호출기로 작업을 마치고 일반 출력 on으로 돌아가려면 다음을 stdout
사용하십시오.
mysql> nopager
답변
--table
또는 -t
옵션을 사용하면 멋진 결과 집합이 출력됩니다.
echo 'desc table_name' | mysql -uroot database -t
또는 mysql에 쿼리를 전달하는 다른 방법 :
mysql -uroot table_name --table < /tmp/somequery.sql
산출:
+--------------+--------------+------+-----+---------+----------------+
| 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 | |
+--------------+--------------+------+-----+---------+----------------+
답변
기본 호출기는 stdout입니다. stdout에는 열 제한이 있으므로 출력이 줄 바꿈됩니다. 다른 도구를 호출기로 설정하여 출력 형식을 지정할 수 있습니다. 두 가지 방법이 있습니다. 하나는 열을 제한하고 다른 하나는 vim에서 처리하는 것입니다.
첫 번째 방법 :
➜ ~ 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>
출력이 완료되지 않았습니다. 내용이 화면에 맞습니다.
두 번째 것 :
vim 모드를 설정하여 .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
+-----------+------------+------------+-------------+-------------+----------
~
~
~
답변
가장 잘 생각한 답변을 보완하기 위해 less -SFX
다른 방법으로 도 사용 .my.cnf
합니다. 홈 폴더의 파일에 광고를 게재하고 싶습니다 .cnf 파일의 예는 다음과 같습니다.
[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'
이 방법으로 얻는 좋은 점은 less
쿼리 출력이 실제로 두 페이지 이상인 경우에만 사용 된다는 것 입니다. 여기에는 모든 플래그에 대한 설명이 있습니다.
- -S : 한 줄, 줄이 화면보다 넓은 경우 줄을 건너 뛰지 말고 오른쪽으로 스크롤하십시오.
- -F : 하나의 화면 이면 내용을 스크롤 할 필요가 없으면 stdout으로 보내십시오.
- -X : 초기화 안 됨, 모든 출력을 비활성화합니다. “less”는로드 할 때마다 출력하도록 구성했을 수 있습니다.
참고 : .my.cnf
파일 pager
에서 [client]
키워드 아래에 명령을 넣지 마십시오 . mysql
잘 작동하지만 mysqldump
인식하지 못하는 것에 대해 불평합니다.