[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

결과는 세로 모드로 표시되므로 각 열 값이 별도의 줄에 인쇄됩니다. 출력은 더 좁지 만 분명히 더 길어질 것입니다.


답변

사용 mysqlego명령을

에서 mysqlhelp명령

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인식하지 못하는 것에 대해 불평합니다.