2010-09-29 16 views
10

ब्लॉब फ़ील्ड वाले कुछ टेबलों की खोज करना। मैं कमांड लाइन क्लाइंट के साथ select * कैसे कर सकता हूं और स्क्रीन पर बाइनरी जंक के गुच्छा को स्क्रॉल करने के बजाए ब्लॉब फ़ील्ड्स को प्रिंटिंग (या मानक फ़ील्ड चौड़ाई में छंटनी) कर सकता हूं? यह mysql 5.1 क्लाइंट के साथ है। विकास के लिए बस एक अलग * और गैर-ब्लॉब फ़ील्ड को व्यक्तिगत रूप से सूचीबद्ध नहीं करना चाहते हैं।mysql कमांड लाइन क्लाइंट को चुनने के लिए कैसे चुनें *

+0

इस संबंधित प्रश्न को देखें: http://stackoverflow.com/questions/9122/select-all-columns-except-one-in-mysql बिल्कुल वही नहीं जो आप खोज रहे हैं, लेकिन यह विशिष्ट कॉलम को बहिष्कृत करने की अनुमति देता है , और BLOB फ़ील्ड का स्वत: बहिष्करण INFORMATION_SCHEMA –

+0

धन्यवाद का उपयोग करके भी संभव हो सकता है। उनमें से कोई भी वास्तव में लक्ष्य पर नहीं है, लेकिन मुझे लगता है कि मैं एक संग्रहीत प्रक्रिया लिख ​​सकता हूं जो मेटा डेटा का उपयोग गतिशील रूप से क्वेरी उत्पन्न करने और teh ब्लॉग को अनदेखा या छोटा करने के लिए करता है। ऐसा लगता है कि कथन वाक्यविन्यास को तालिका से निकालने के लिए विस्तारित करने की आवश्यकता होगी * तालिका से बाहर blob_column आदि – tribalvibes

उत्तर

3

यह MySQL में मूल रूप से प्रदर्शन किया जा सकता है लेकिन यह काफी बोझल है:

SET @sql=CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
    INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='test' 
    AND DATA_TYPE!='blob'), ' FROM test.test'); 
PREPARE preparedsql FROM @sql; 
EXECUTE preparedsql; 
DEALLOCATE PREPARE preparedsql; 

मैं आम तौर पर के रूप में वे प्रणालियों के बीच अधिक परिवहनीय रहे MySQL प्रक्रियाओं के मार उपनाम/समारोह पसंद करते हैं:

function blobless() 
{ 
    cols='' 
    _ifs=$IFS 
    IFS=$(echo -en "\n\b") 
    for col in $(mysql --skip-column-names -e "SELECT COLUMN_NAME FROM 
     INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$1' AND TABLE_NAME='$2' 
     AND DATA_TYPE NOT LIKE '%blob'"); do 
    cols="$cols,$col" 
    done 
    IFS=$_ifs 
    mysql -e "SELECT $(echo $cols | cut -c2-) FROM $1.$2 $3" 
} 

इस प्रकार शामिल करें:

[andy ~]# blobless test test "where id>0" 
+----+--------+ 
| id | t  | 
+----+--------+ 
| 1 | 123 | 
| 2 | 124213 | 
+----+--------+ 

यदि आप MySQL क्लाइंट कंसोल में हैंकार्यक्रम को निलंबित करने और खोल को छोड़ने के लिए। फिर उस ब्लॉबलेस डेटा को देखने के लिए blobless db table का उपयोग करें। fg निलंबित नौकरी (यानी MySQL क्लाइंट) को अग्रभूमि में पुनर्स्थापित करेगा। यह भी मार कार्यों द्वारा उपयोग किया जाएगा -

आप मेजबान/उपयोगकर्ता की आपूर्ति करने/कमांड लाइन पर पारित होने को बचाने के लिए ~/.my.cnf (howto) में डिफ़ॉल्ट MySQL कनेक्शन विवरण निर्धारित कर सकते हैं।

+0

कूल क्वेरी पहले में निर्माण करती है, लेकिन मैंने भी इसी तरह से संभाला है क्योंकि आपके "ब्लॉबलेस()" समाधान भी – DRapp

+0

सुंदर, धन्यवाद प्रदान करता है! – tribalvibes

संबंधित मुद्दे