টার্মিনালটিতে কোনও মাইএসকিউএল সেলেক্টে কীভাবে সর্বোত্তম ক্ষেত্রটি ফেরত দেওয়া যায়?


271

আমি পটিটি চালানোর জন্য ব্যবহার করছি :

mysql> SELECT * FROM sometable;

sometableঅনেক ক্ষেত্র রয়েছে এবং টার্মিনালে প্রদর্শিত হওয়ার চেষ্টা করে অনেক কলামে এর ফলাফল। ক্ষেত্রগুলি পরের লাইনে মোড়ানো হয় তাই ক্ষেত্রের মানগুলির সাথে কলামের শিরোনামগুলি লাইন করা খুব শক্ত।

টার্মিনালে এ জাতীয় ডেটা দেখার কী সমাধান রয়েছে?

আমার কাছে পিএইচপিএমআইএডমিন - বা অন্য কোনও জিইউআই ইন্টারফেস অ্যাক্সেস নেই বা চাই না। আমি এটির মতো কমান্ড-লাইন সমাধানগুলি সন্ধান করছি: মাইএসকিউএল ক্যোয়ারির ফলাফলগুলি পাঠ্য বা সিভিএস ফাইলে সংরক্ষণ করুন


সমাধানটি হ'ল বিকাশকারীকে বাগটি ঠিক করার জন্য যা টার্মিনালটিকে একক স্ক্রিনের চেয়ে আরও প্রশস্ত করা যায়।
আউল

@ ওল, এটি কি আসলেই বাগ? এখানে প্রদত্ত সমাধানগুলি কি এখনও সমস্যার সমাধান করে না?
গাথাইড

উত্তর:


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
উইন্ডোজ কেস-সংবেদনশীল না হওয়া সত্ত্বেও, এটি Gঅবশ্যই মূলধন করা উচিত।
রাফায়েল ব্যারোস

3
কেবলমাত্র উপরের মন্তব্যটি পরিষ্কার করার জন্য, আপনি টাইপ SELECT * FROM sometable\Gকরার সময় উইন্ডোজ নয়, মাইএসকিএল কমান্ড লাইন ক্লায়েন্টের কাছে স্ট্রিং প্রেরণ করছেন, এ কারণেই বিষয়টি Gসংবেদনশীল
হারিকেন হ্যামিল্টন

2
এটি প্রচুর পরিমাণে রেকর্ড সহ কার্যকরভাবে কাজ করে না।
Bżażej মিশালিক

1
লিঙ্কযুক্ত ডকুমেন্টেশনটি বলে: "অহং (\ G) মাইএসকিএল সার্ভারে আদেশ পাঠান, উল্লম্বভাবে ফলাফল প্রদর্শন করুন words বিবৃতিতে INDEX শব্দটি ব্যবহার করুন "
বেনিয়ামিন

আমি এর মুখোমুখি হয়েছি। আপনি কি দয়া করে আমাকে এটি ঠিক করতে পারেন? sh: 1: less: not found 44 rows in set (0.01 sec)
কোয়ে তাং

347

আপনি এটি দরকারী (শুধুমাত্র উইন্ডোজবিহীন) পেতে পারেন:

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

এটি lessকমান্ড লাইন সরঞ্জামের মাধ্যমে আউটপুটটি পাইপ করবে যা - এই পরামিতিগুলির সাহায্যে - আপনাকে একটি সারণী আউটপুট দেবে যা কার্সার কীগুলির সাহায্যে অনুভূমিকভাবে এবং উল্লম্বভাবে স্ক্রোল করা যায়।

qকীটি হিট করে এই দৃশ্যটি ছেড়ে দিন , যা lessসরঞ্জামটি ছাড়বে ।


23
এটি প্রতিভা। দুর্দান্ত টিপ সময়ের ভোর থেকেই আমি এটি চেয়েছিলাম।
রিচার্ড এইচ

60
নোপাগার ব্যবহার করে পুনরায় সেট করা যায়।
epeleg

3
কম /অনুসন্ধান করা হিট দ্বারা করা হয় এবং তারপরে অনুসন্ধানের স্ট্রিং লিখুন, যা আবার রেজিওস হতে পারে এবং তারপরে এন্টার টিপুন। ( ) nটিপে টিপে এবং পিছনের দিকে অনুসন্ধান করুন । NShift + n
Krøllebølle

5
lessআরও দুর্দান্ত জিনিস করতে পারে। &আপনি ব্যবহার করে নিয়মিত এক্সপ্রেশন ব্যবহার করে আরও ফলাফল ফিল্টার করতে পারেন (কেবল মিলের লাইনগুলি দেখায়)। এটি /অনুসন্ধানের পাশাপাশি কাজ করে (যা এখনও হাইলাইট করার কারণ হবে)। &আবার আঘাত করে ফিল্টারটি পুনরায় সেট করুন এবং তারপরে কেবল রিটার্ন টিপুন।
ড্যানিয়েল শানলার

3
যদি আউটপুট ইতিমধ্যে স্ক্রিনের সাথে ফিট করে তবে এফটি তত্ক্ষণাত্‍ প্রস্থান করবে। এক্স হ'ল বাইরে বেরোনোর ​​সময় স্ক্রিনটি সাফ করার চেষ্টা করা থেকে কম প্রতিরোধ করা। কম মানুষ পৃষ্ঠা দেখুন।
ড্যানিয়েল শেনলার

46

এর \Gপরিবর্তে কোয়েরিটি কার্যকর করতে ব্যবহার করে উল্লম্ব মোড সক্ষম করার চেষ্টা করুন ;:

mysql> SELECT * FROM sometable \G

আপনার ফলাফলগুলি উল্লম্ব মোডে তালিকাভুক্ত হবে, সুতরাং প্রতিটি কলাম মান পৃথক লাইনে মুদ্রিত হবে। আউটপুট সংকীর্ণ হবে তবে স্পষ্টতই অনেক দীর্ঘ।


2
এর পরিপূরক হিসাবে \G, আপনি এর \gপ্রতিস্থাপন হিসাবেও ব্যবহার করতে পারেন ;, আমি জানি, কে এটি করবে, তবে এটি কেন \Gপ্রথম স্থানে কাজ করে তা প্রসঙ্গে দেয় ।
সান্টিয়াগো আরিজিটি

25

ব্যবহার mysqlএর egoকমান্ড

থেকে mysqlএর helpকমান্ড প্রয়োগ করুন:

অহং (\ G) mysql সার্ভারে কমান্ড প্রেরণ করুন, ফলাফলটি উল্লম্বভাবে প্রদর্শন করুন।

\Gআপনার এটিকে যুক্ত করে আপনি selectখুব পরিষ্কার উল্লম্ব আউটপুট পেতে পারেন:

mysql> SELECT * FROM sometable \G

পেজার ব্যবহার করা

আপনি মাইএসকিউএলকে lessপেজারটি তার -Sবিকল্পের সাথে ব্যবহার করতে বলতে পারেন যা প্রশস্ত রেখাগুলি ছড়িয়ে দেয় এবং আপনাকে একটি আউটপুট দেয় যা আপনি তীর কীগুলির সাহায্যে স্ক্রোল করতে পারেন:

mysql> pager less -S

সুতরাং, পরের বার আপনি একটি বিস্তৃত আউটপুট সহ একটি কমান্ড চালাবেন, মাইএসকিউএল আপনাকে lessপেজারের সাহায্যে আউটপুট ব্রাউজ করতে দেবে :

mysql> SELECT * FROM sometable;

যদি আপনি পেজারটি সম্পন্ন করেন এবং নিয়মিত আউটপুটটিতে ফিরে যেতে চান তবে এটি stdoutব্যবহার করুন:

mysql> nopager

2
এই! সুন্দর, এটিকে আরও নিখুঁত করার একমাত্র উপায় হ'ল কলামগুলি অনুভূমিকভাবে কতটা প্রসারিত হবে তা দেখার উপায়। স্ক্রোলবারের মতো তবুও, দুর্দান্ত সমাধান।
ব্র্যান্ডন বেনিফিল্ড

24

আপনি --tableবা -tবিকল্পটি ব্যবহার করতে পারেন , যা ফলাফলের একটি দুর্দান্ত দেখায় সেট তৈরি করবে will

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

বা মাইএসকিএল-তে কোনও কোয়েরি পাস করার জন্য অন্য কোনও পদ্ধতি, যেমন:

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 এর কলাম সীমাবদ্ধতা রয়েছে, সুতরাং আউটপুট মোড়ানো হবে। আউটপুট ফর্ম্যাট করতে আপনি পেজার হিসাবে অন্যান্য সরঞ্জামগুলি সেট করতে পারেন। দুটি পদ্ধতি আছে। একটি হ'ল কলামটি সীমাবদ্ধ করা, অন্যটি এটি ভিমে প্রসেস করা।

প্রথম পদ্ধতি:

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

আউটপুট সম্পূর্ণ হয় না। সামগ্রীটি আপনার স্ক্রিনে ফিট করে।

দ্বিতীয়টি:

আপনার .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। এখানে আরও গৃহীত উত্তরগুলির জন্য আমাকে অপ্রয়োজনীয় নির্ভরতা ডাউনলোড করতে হবে।
গ্যাব্রিয়েল গেটস

7

আমি যে উত্তরটি সবচেয়ে ভাল বলে মনে করেছি, কেবল তার পরিপূরক করতে আমি এটি ব্যবহার করি less -SFXতবে অন্যভাবে: আমি .my.cnfআমার হোম ফোল্ডারে আমার ফাইলে এটি বিজ্ঞাপন করতে চাই , উদাহরণস্বরূপ সিএনএফ ফাইলটি দেখতে:

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

এটি এইভাবে রাখার ভাল জিনিসটি কেবল lessতখনই ব্যবহৃত হয় যখন কোনও ক্যোয়ারীর আউটপুট আসলে এক পৃষ্ঠার বেশি দীর্ঘ হয়, এখানে সমস্ত পতাকাটির ব্যাখ্যা এখানে দেওয়া হয়েছে:

  • -এস: একক লাইন, পর্দার চেয়ে লাইন প্রশস্ত হলে লাইনটি এড়িয়ে যাবেন না, পরিবর্তে ডানদিকে স্ক্রোল করার অনুমতি দিন।
  • -এফ: একটি স্ক্রিন হলে প্রস্থান করুন , যদি সামগ্রীতে স্ক্রোলিংয়ের প্রয়োজন না হয় তবে কেবল স্টডআউটে প্রেরণ করুন।
  • -এক্স: কোনও দীক্ষা নেই, প্রতিবার লোড হওয়ার সাথে সাথে কোনও আউটপুট "কম" অক্ষম করে output

দ্রষ্টব্য: .my.cnfফাইলটিতে pagerকমান্ডটি [client]কীওয়ার্ডের নীচে রাখবেন না ; যদিও এটি mysqlভালভাবে কাজ করতে পারে, mysqldumpএটি স্বীকৃতি না দেওয়ার বিষয়ে অভিযোগ করবে।


মনে রাখবেন যে আপনি যদি কোনও বড় টেবিলের উপর "সীমাবদ্ধ-কম" ক্যোয়ারী কার্যকর করেন তবে আপনি এর দ্বারা সৃষ্ট বিশৃঙ্খলার বিষয়টি লক্ষ্য করবেন না কারণ lessআউটপুটটির প্রথম লাইনে অ্যাঙ্করড থাকবে।
সান্তিয়াগো আরিজিটি

2

আপনি যদি মাইএসকিউএল ইন্টারেক্টিভভাবে ব্যবহার করে থাকেন তবে আপনি নিজের পেজারটি এটির জন্য সেট করতে পারেন 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

এই পেজারটি ট্যাবুলার ডেটার জন্য ডিজাইন করা হয়েছে - এবং মাইএসকিউএলও সমর্থিত।

মারিয়াডিবি [সাকিলা]> পেজার পিএসপিজি-এস 14-এক্স --ফোর্স-ইউনিবির্ডার - কোয়েট-যদি-ও-স্ক্রিন
পৃষ্ঠাগুলি 'পিএসপিজি-এস 14-এক্স --ফোর্স-ইউনিবির্ডার - কোয়েট-যদি-ওয়ান-স্ক্রিন' এ সেট করেছে
মারিয়াডিবি [শাকিলা]> এখনই নির্বাচন করুন ();
মারিয়াডিবি [শাকিলা]> নিসার_বুট_স্লোয়ার_ফিল্ম_লিস্ট সীমা 100 থেকে * নির্বাচন করুন;

0

আমি বিশ্বাস করি পুট্টির সর্বাধিক সংখ্যক কলাম রয়েছে যা আপনি উইন্ডোর জন্য নির্দিষ্ট করতে পারেন।

উইন্ডোজের জন্য আমি ব্যক্তিগতভাবে উইন্ডোজ পাওয়ারশেল ব্যবহার করি এবং স্ক্রিন বাফার প্রস্থটি যথাযথভাবে উচ্চ করে দেয়। কলামের প্রস্থ স্থির থাকে এবং ডেটা দেখার জন্য আপনি একটি অনুভূমিক স্ক্রোল বারটি ব্যবহার করতে পারেন। আমার এখন একই সমস্যা ছিল

সম্পাদনা করুন: রিমোট হোস্টগুলির জন্য যে আপনাকে এসএসএইচ করতে হবে আপনি প্লিংক + উইন্ডোজ পাওয়ারশেলের মতো কিছু ব্যবহার করবেন


0

আপনি teeআপনার ক্যোয়ারির ফলাফল কোনও ফাইলটিতে লিখতে ব্যবহার করতে পারেন :

tee somepath\filename.txt

-1

উইন্ডোজ কমান্ড প্রম্পট ব্যবহার করে আপনি উইন্ডোর বাফার আকারটি যতটা কলামের সংখ্যা দেখতে চান বাড়িয়ে নিতে পারেন। এটি টেবিলের কলামগুলির সংখ্যার উপর নির্ভর করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.