Çok fazla alan döndüren bir MySQL SELECT Terminalinde en iyi nasıl görüntülenir?


271

Çalıştırmak için PuTTY kullanıyorum :

mysql> SELECT * FROM sometable;

sometablebirçok alana sahiptir ve bu, terminalde görüntülenmeye çalışan birçok sütuna neden olur. Alanlar sonraki satıra sarılır, böylece sütun başlıklarını alan değerleri ile sıralamak çok zordur.

Bu tür verileri terminalde görüntülemek için hangi çözümler var?

Ben phpMyAdmin - veya başka bir GUI arayüzlerine erişmek istemiyorum. Bunun gibi komut satırı çözümleri arıyorum: MySQL Query sonuçlarını metin veya CVS dosyasına kaydedin


Çözüm, geliştiricinin terminalin tek bir ekrandan daha geniş bir alana genişletilmesini engelleyen hatayı düzeltmesidir.
Baykuş

@ Baykuş, bu gerçekten bir hata mı? Burada sağlanan çözümler sorunu henüz çözmedi mi?
Gathide

Yanıtlar:


531

\G Yerine ile sorguyu sonlandırın ;. Örneğin:

SELECT * FROM sometable\G

Bu sorgu, satırları dikey olarak şu şekilde görüntüler:

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

9
Windows'un büyük / küçük harfe duyarlı olmamasına rağmen, Gbüyük harfle yazılmalıdır.
Rafael Barros

3
Yukarıdaki yorumu açıklığa kavuşturmak için, yazarken SELECT * FROM sometable\Gdizeyi Windows'a değil, mysql komut satırı istemcisine gönderiyorsunuz, bu yüzden Gbüyük / küçük harfe duyarlı
Hurricane Hamilton

2
Dışında büyük miktarlarda kayıt ile iyi çalışmıyor.
Błażej Michalik

1
Bağlantılı dokümantasyon şöyle diyor: "ego (\ G) mysql sunucusuna komut gönder, sonucu dikey olarak göster. Başka bir deyişle oluşabilecek bir sınırlayıcı tanımlamaya dikkat et. ifadelerde INDEX kelimesini kullanın. "
Benjamin

Bununla karşılaştım. Bana nasıl düzelteceğimi söyler misiniz? sh: 1: less: not found 44 rows in set (0.01 sec)
Quy Tang

347

Bunu yararlı bulabilirsiniz (yalnızca Windows olmayan):

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

Bu, çıkışı less, bu parametrelerle - imleç tuşlarıyla yatay ve dikey olarak kaydırılabilen tablo şeklinde bir çıktı verecek olan komut satırı aracıyla borulandıracaktır .

Araçtan qçıkacak tuşa basarak bu görünümü terk edin less.


23
bu dahi. mükemmel ipucu. Zamanın başlangıcından beri bunu istedim.
Richard H

60
nopager kullanılarak sıfırlanabilir.
epeleg

3
Daha az /arama yapmak, regexes de olabilen arama dizesine basıp yazarak yapılır ve enter tuşuna basın. ( ) nTuşuna basarak ileri ve geri arama yapın . NShift + n
Krøllebølle

5
lessdaha havalı şeyler yapabilir. Kullanılması &filtreleme yapabilirsiniz (sadece eşleşen satırları göster) sonuç ayrıca normal ifadeler kullanarak. Bu, /aramaya ek olarak da çalışır (yine de vurgulamaya neden olur). Filtreyi &tekrar vurarak ve ardından Return tuşuna basarak sıfırlayın .
Daniel Schneller

3
Çıktı ekrana zaten uyuyorsa, F hemen kapanacaktır. X, çıkışta ekranı temizlemeye daha az engel olmaktır. Daha az man sayfasına bakın.
Daniel Schneller

46

Aşağıdakiler \Gyerine sorguyu yürütmek için kullanarak dikey modu etkinleştirmeyi deneyin ;:

mysql> SELECT * FROM sometable \G

Sonuçlarınız dikey modda listelenir, böylece her sütun değeri ayrı bir satıra yazdırılır. Çıktı daha dar ama açıkçası çok daha uzun olacak.


2
tamamlayıcı olarak \G, ayrıca kullanabilirsiniz \giçin bir yedek olarak ;yapacağını biliyorum, ama neden bağlam sunan \Gilk etapta workd.
santiago arizti

25

Kullanılması mysqlbireyin egokomutunu

Gönderen mysqlbireyin helpkomutu:

ego (\ G) MySQL sunucusuna komut gönder, sonucu dikey olarak göster.

Bir ekleyerek Yani \Gadresinden Müşteri select, çok temiz dikey çıkış alabilirsiniz:

mysql> SELECT * FROM sometable \G

Çağrı cihazı kullanma

MySQL'e lessçağrı cihazını -Sgeniş çizgileri kesen ve ok tuşlarıyla kaydırma yapabileceğiniz bir çıktı veren seçeneği ile kullanmasını söyleyebilirsiniz :

mysql> pager less -S

Böylece, bir daha geniş bir çıkışı olan bir komutu çalıştırdığınızda, MySQL çıktıya lessçağrı cihazı ile göz atmanıza izin verir :

mysql> SELECT * FROM sometable;

Çağrı cihazını bitirdiyseniz ve normal çıkışa geri dönmek istiyorsanız stdout, şunu kullanın:

mysql> nopager

2
Bu! Güzel, bunu daha mükemmel hale getirmenin tek yolu, sütunların yatay olarak ne kadar uzandığını görmenin bir yoluna sahip olmaktır. Kaydırma çubuğu gibi. Yine de, harika bir çözüm.
Brandon Benefield

24

Güzel görünümlü bir sonuç kümesi verecek --tableveya -tseçeneğini kullanabilirsiniz.

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

veya mysql'e bir sorgu iletmek için başka bir yöntem, örneğin:

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

çıktı:

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

8

Varsayılan çağrı cihazı stdout'tur. Stdout sütun sınırlamasına sahiptir, bu nedenle çıktı sarılır. Çıktıyı biçimlendirmek için diğer araçları çağrı cihazı olarak ayarlayabilirsiniz. İki yöntem vardır. Biri sütunu sınırlamak, diğeri vim içinde işlemek.

İlk yöntem:

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

Çıktı tamamlanmadı. İçerik ekranınıza sığar.

İkinci olan:

Vim modunu .vimrc'nizde nowrap olarak ayarlayın

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

Bu benim için en uygun olanı hafif bir liman işçisi konteynırında. pager cut -c -200. Burada daha kabul edilen cevaplar, gereksiz bağımlılıkları indirmemi gerektiriyordu.
Gabriel Gates

7

Ben sadece en iyi düşündüğüm yanıtı tamamlamak için, ben de kullanmak less -SFXama farklı bir şekilde: Ben .my.cnfbenim ana klasör dosyama reklam gibi , örnek bir cnf dosyası şöyle:

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

Bu şekilde sahip olmanın iyi yanı less, yalnızca bir sorgunun çıktısı aslında birden fazla sayfa uzunluğunda kullanıldığında, burada tüm bayrakların açıklamasıdır:

  • -S: Tek satır, satır ekrandan daha geniş olduğunda satırı atlamayın, bunun yerine sağa kaydırmaya izin verin.
  • -F: Bir ekrandan çıkın , içeriğin kaydırılması gerekmiyorsa stdout'a gönderin.
  • -X: Başlatma yok, her yüklendiğinde "daha az" çıktı için yapılandırılmış olabilecek çıktıları devre dışı bırakır.

Not: .my.cnfdosyada pagerkomutu [client]anahtar kelimenin altına koymayın ; her ne kadar mysqliyi mysqldumpçalışsa da, onu tanımamaktan şikayet edecektir.


Büyük bir tabloda "sınırsız" bir sorgu yürütürseniz, bunun neden olduğu kaosu fark etmeyeceğinizi unutmayın, çünkü lessçıktının ilk satırına bağlı kalacaktır.
santiago arizti

2

MySQL'i etkileşimli olarak kullanıyorsanız, çağrı cihazınızı şu şekilde kullanmak üzere ayarlayabilirsiniz sed:

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

sedÇağrı cihazı olarak kullanmazsanız , çıktı aşağıdaki gibidir:

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

1

Ben yazdım pspg- https://github.com/okbob/pspg

Bu çağrı cihazı tablo verileri için tasarlanmıştır ve MySQL de desteklenir.

MariaDB [sakila]> çağrı cihazı pspg -s 14 -X --force-uniborder - bir ekran halinde çık
PAGER, 'pspg -s 14 -X --force-uniborder - bir ekran halinde çık' 'olarak ayarlandı
MariaDB [sakila]> şimdi seçin ();
MariaDB [sakila]> nicer_but_slower_film_list sınır 100'den * seçin;

0

Macunun pencere için belirleyebileceğiniz maksimum sütun sayısına sahip olduğuna inanıyorum.

Windows için kişisel olarak Windows PowerShell kullanıyorum ve ekran arabellek genişliğini oldukça yüksek olarak ayarlıyorum. Sütun genişliği sabit kalır ve verileri görmek için yatay bir kaydırma çubuğu kullanabilirsiniz. Şimdi yaşadığınız aynı problemi yaşadım.

edit: içine SSH zorunda uzak ana bilgisayarlar için plink + Windows PowerShell gibi bir şey kullanırsınız


0

teeSorgunuzun sonucunu bir dosyaya yazmak için kullanabilirsiniz :

tee somepath\filename.txt

-1

Windows Komut İstemi'ni kullanarak, pencerenin arabellek boyutunu sütun sayısını görmek istediğiniz kadar artırabilirsiniz. Bu tablodaki sütunların sayısına bağlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.