วิธีการแสดงที่ดีที่สุดในเทอร์มินัล MySQL SELECT คืนค่าฟิลด์มากเกินไป?


271

ฉันใช้PuTTYเพื่อเรียกใช้:

mysql> SELECT * FROM sometable;

sometableมีหลายฟิลด์และผลลัพธ์นี้มีหลายคอลัมน์ที่พยายามแสดงในเทอร์มินัล เขตข้อมูลห่อลงในบรรทัดถัดไปดังนั้นจึงเป็นเรื่องยากมากที่จะจัดเรียงชื่อคอลัมน์ที่มีค่าฟิลด์

มีโซลูชั่นอะไรบ้างสำหรับการดูข้อมูลดังกล่าวใน terminal

ฉันไม่ต้องการหรือต้องการเข้าถึง phpMyAdmin - หรืออินเตอร์เฟส GUI อื่น ๆ ฉันกำลังมองหาโซลูชันบรรทัดคำสั่งเช่นนี้: บันทึกผลลัพธ์การสืบค้น MySQL เป็นข้อความหรือไฟล์ CVS


ทางออกสำหรับนักพัฒนาในการแก้ไขข้อผิดพลาดที่หยุดเทอร์มินัลที่ถูกขยายให้กว้างกว่าหน้าจอเดียว
Owl

@Oll นี่เป็นข้อผิดพลาดจริงๆหรือ วิธีแก้ปัญหาที่ให้ไว้ที่นี่ยังไม่สามารถแก้ไขปัญหาได้หรือไม่
Gathide

คำตอบ:


531

ยุติการค้นหาที่มีในสถานที่ของ\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
          ...

9
แม้ว่า Windows จะไม่ตรงตามตัวพิมพ์ใหญ่ - เล็ก แต่Gต้องเป็นตัวพิมพ์ใหญ่
Rafael Barros

3
เพียงชี้แจงแสดงความคิดเห็นข้างต้นเมื่อคุณพิมพ์SELECT * FROM sometable\Gคุณกำลังส่งสตริงเป็นลูกค้าบรรทัดคำสั่ง MySQL, ไม่ Windows ซึ่งเป็นเหตุผลที่Gเป็นกรณีที่สำคัญ
พายุเฮอริเคนแฮมิลตัน

2
ยกเว้นว่ามันจะใช้งานไม่ได้กับระเบียนจำนวนมาก
Błażej Michalik

1
เอกสารที่เชื่อมโยงบอกว่า: "ego (\ G) ส่งคำสั่งไปยังเซิร์ฟเวอร์ mysql แสดงผลในแนวตั้งโปรดระวังเกี่ยวกับการกำหนดตัวคั่นที่อาจเกิดขึ้นภายในคำอื่น ๆ ตัวอย่างเช่นถ้าคุณกำหนดตัวคั่นเป็น X คุณจะไม่สามารถ ใช้คำว่า INDEX ในข้อความสั่ง "
เบนจามิน

ฉันพบสิ่งนี้ คุณช่วยบอกวิธีการแก้ไขได้ไหม sh: 1: less: not found 44 rows in set (0.01 sec)
Quy Tang

347

คุณอาจพบว่ามีประโยชน์ (ไม่ใช่ Windows เท่านั้น):

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

สิ่งนี้จะทำให้ท่อ outut ผ่านlessเครื่องมือบรรทัดคำสั่งซึ่ง - ด้วยพารามิเตอร์เหล่านี้ - จะให้เอาต์พุตแบบตารางที่สามารถเลื่อนในแนวนอนและแนวตั้งได้ด้วยปุ่มเคอร์เซอร์

ออกจากมุมมองนี้โดยกดปุ่มqซึ่งจะออกจากlessเครื่องมือ


23
นี่คืออัจฉริยะ เคล็ดลับที่ยอดเยี่ยม ตั้งแต่เช้าตรู่ฉันต้องการสิ่งนี้
Richard H

60
สามารถรีเซ็ตได้โดยใช้ nopager
epeleg

3
การค้นหาน้อยทำได้โดยกดปุ่ม/แล้วเขียนสตริงการค้นหาซึ่งสามารถ regexes แล้วกด Enter ค้นหาไปข้างหน้าโดยกดnและถอยหลังโดยกดN( Shift + n)
Krøllebølle

5
lessสามารถทำสิ่งดีๆได้มากกว่านี้ การใช้&คุณสามารถกรอง (แสดงเฉพาะรายการที่ตรงกัน) ผลลัพธ์เพิ่มเติมโดยใช้นิพจน์ทั่วไป การทำงานนี้นอกเหนือจากการ/ค้นหา (ซึ่งจะยังคงทำให้เกิดการเน้น) รีเซ็ตตัวกรองโดยกดปุ่ม&อีกครั้งจากนั้นเพียงกดย้อนกลับ
Daniel Schneller

3
F จะเลิกทำงานน้อยลงในทันทีหากเอาท์พุทที่เหมาะกับหน้าจอ X คือการป้องกันให้น้อยลงจากการพยายามล้างหน้าจอเมื่อออก ดูหน้าคนน้อย
Daniel Schneller

46

ลองเปิดใช้งานโหมดแนวตั้งโดยใช้\Gเพื่อดำเนินการค้นหาแทน;:

mysql> SELECT * FROM sometable \G

ผลลัพธ์ของคุณจะปรากฏในโหมดแนวตั้งดังนั้นค่าแต่ละคอลัมน์จะถูกพิมพ์ในบรรทัดแยกต่างหาก ผลลัพธ์จะแคบลง แต่เห็นได้ชัดว่ายาวขึ้นมาก


2
เป็นส่วนเสริม\Gคุณยังสามารถใช้\gแทน;ฉันรู้ว่าใครจะทำ แต่มันให้บริบทว่าทำไม\Gworkd ในสถานที่แรก
santiago arizti

25

ใช้mysqlของegoคำสั่ง

จากmysql's helpคำสั่ง:

ego (\ G) ส่งคำสั่งไปยังเซิร์ฟเวอร์ mysql แสดงผลในแนวตั้ง

ดังนั้นเมื่อผนวก a \Gกับคุณselectคุณจะได้ผลลัพธ์ในแนวตั้งที่สะอาดมาก:

mysql> SELECT * FROM sometable \G

ใช้เพจเจอร์

คุณสามารถบอก MySQL ให้ใช้lessเพจเจอร์ที่มี-Sตัวเลือกที่สับเส้นกว้างและให้ผลลัพธ์ที่คุณสามารถเลื่อนด้วยปุ่มลูกศร:

mysql> pager less -S

ดังนั้นในครั้งต่อไปที่คุณรันคำสั่งด้วยเอาต์พุตที่กว้าง MySQL จะอนุญาตให้คุณเรียกดูผลลัพธ์ด้วยlessเพจเจอร์:

mysql> SELECT * FROM sometable;

ถ้าคุณทำกับเพจเจอร์และต้องการกลับไปที่เอาต์พุตปกติstdoutให้ใช้สิ่งนี้:

mysql> nopager

2
นี้! สวยงามวิธีเดียวที่จะทำให้สิ่งนี้สมบูรณ์แบบยิ่งขึ้นคือการมีวิธีดูว่าคอลัมน์ทอดยาวไปตามแนวนอนมากแค่ไหน เหมือนแถบเลื่อน อย่างไรก็ตามทางออกที่ดี
แบรนดอน Benefield

24

คุณสามารถใช้ตัวเลือก--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    |                |
+--------------+--------------+------+-----+---------+----------------+

8

เพจเจอร์เริ่มต้นคือ stdout stdout มีข้อ จำกัด ของคอลัมน์ดังนั้นผลลัพธ์จะถูกห่อ คุณสามารถตั้งค่าเครื่องมืออื่นเป็นเพจเจอร์เพื่อจัดรูปแบบผลลัพธ์ มีสองวิธี หนึ่งคือการ จำกัด คอลัมน์อื่น ๆ คือการประมวลผลในกลุ่ม

วิธีแรก:

  ~  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 เป็น nowrap ใน. 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
+-----------+------------+------------+-------------+-------------+----------
~
~
~

สิ่งนี้ทำงานได้ดีที่สุดสำหรับฉันในคอนเทนเนอร์นักเทียบเรือน้ำหนักเบา pager cut -c -200. คำตอบที่ยอมรับมากขึ้นที่นี่ทำให้ฉันต้องดาวน์โหลดการพึ่งพาที่ไม่จำเป็น
Gabriel Gates

7

เพียงเพื่อเติมเต็มคำตอบที่ฉันคิดว่าดีที่สุดฉันก็ใช้less -SFXแต่ในวิธีที่แตกต่าง: ฉันชอบที่จะโฆษณาไปยัง.my.cnfไฟล์ของฉันในโฟลเดอร์บ้านของฉันไฟล์ cnf ตัวอย่างเช่นนี้:

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

สิ่งที่ดีเกี่ยวกับการใช้วิธีนี้lessคือใช้เมื่อเอาต์พุตของเคียวรียาวเกินหนึ่งหน้าจริง ๆ นี่คือคำอธิบายของแฟล็กทั้งหมด:

  • -S: บรรทัดเดียวอย่าข้ามบรรทัดเมื่อบรรทัดกว้างกว่าหน้าจอแทนที่จะอนุญาตให้เลื่อนไปทางขวา
  • -F: ออกจากถ้าหนึ่งหน้าจอถ้าเนื้อหาไม่จำเป็นต้องเลื่อนแล้วเพียงส่งไปยัง stdout
  • -X: ไม่มี init ปิดการทำงานของเอาต์พุต "น้อยลง" ใด ๆ ที่อาจกำหนดค่าให้ส่งออกทุกครั้งที่โหลด

หมายเหตุ: ใน.my.cnfไฟล์อย่าวางpagerคำสั่งใต้[client]คำหลัก แม้ว่ามันอาจทำงานได้mysqlดี แต่mysqldumpจะบ่นว่าไม่รู้จัก


โปรดทราบว่าหากคุณดำเนินการค้นหา "จำกัด น้อย" ในตารางขนาดใหญ่คุณจะไม่สังเกตเห็นความโกลาหลที่เกิดจากมันเพราะlessจะยึดอยู่กับบรรทัดแรกของการส่งออก
santiago arizti

2

หากคุณใช้ MySQL แบบโต้ตอบคุณสามารถตั้งค่าเพจเจอร์ให้ใช้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เป็นเพจเจอร์เอาต์พุตจะเป็นดังนี้:

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

1

ฉันเขียนpspg- https://github.com/okbob/pspg

เพจเจอร์นี้ถูกออกแบบมาสำหรับข้อมูลแบบตารางและ MySQL ก็รองรับเช่นกัน

MariaDB [sakila]> pager pspg -s 14 -X - บังคับให้ยกเลิกการสั่งซื้อ - ได้รับ -a-one-screen
PAGER ตั้งค่าเป็น 'pspg -s 14 -X - บังคับให้ยกเลิกการโหลด - ไม่มี - หน้าจอเดียว'
MariaDB [sakila]> เลือกตอนนี้ ();
MariaDB [sakila]> select * จาก nicer_but_slower_film_list ขีด จำกัด 100;

0

ฉันเชื่อว่าสีโป๊วมีจำนวนคอลัมน์สูงสุดที่คุณสามารถระบุสำหรับหน้าต่าง

สำหรับ Windows ฉันใช้ Windows PowerShell เป็นการส่วนตัวและตั้งค่าความกว้างของบัฟเฟอร์หน้าจอให้สูงพอสมควร ความกว้างของคอลัมน์ยังคงอยู่และคุณสามารถใช้แถบเลื่อนแนวนอนเพื่อดูข้อมูล ฉันมีปัญหาเดียวกันกับที่คุณมีอยู่ตอนนี้

แก้ไข: สำหรับโฮสต์ระยะไกลที่คุณต้องใช้ SSH คุณจะต้องใช้บางอย่างเช่น Plink + Windows PowerShell


0

คุณสามารถใช้teeเพื่อเขียนผลลัพธ์ของแบบสอบถามลงในไฟล์:

tee somepath\filename.txt

-1

การใช้พรอมต์คำสั่งของ Windows คุณสามารถเพิ่มขนาดบัฟเฟอร์ของหน้าต่างได้มากเท่าที่คุณต้องการดูจำนวนคอลัมน์ ขึ้นอยู่กับจำนวนคอลัมน์ในตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.