2012-06-14 17 views
6

मैं डेटाबेस में 5000 सीएसवी फ़ाइलों को स्कैन कर रहा हूं। अफसोस की बात है कि फ़ाइलों के पास 0 है, 0 के लिए। इस प्रकार जब भी मैं अपनी स्क्रिप्ट चलाता हूं तो यह दुर्घटनाग्रस्त हो जाता है। मैंने सुना है कि सख्त मोड को अक्षम करके यह त्रुटि संभव है। तो मैंने अपने संख्यात्मक क्षेत्रों के लिए 0 के रूप में खाली स्ट्रिंग में पढ़ने की अनुमति देने के लिए सख्त मोड को अक्षम करने का प्रयास किया। हालांकि त्रुटि बनी हुई है।MySQL सख्त मोड को अक्षम करना

तो सख्त मोड को अक्षम करने से इंट फील्ड में पढ़ा जा सकता है? ('' है दो अर्थात रिक्त स्ट्रिंग qoutes)

यदि ऐसा है तो क्यों की स्थापना की थी

sql_mode = ''

my.ini कॉन्फ़िग फ़ाइल समस्या को ठीक नहीं में

धन्यवाद!

उत्तर

17

मुझे लगता है कि आप LOAD DATA INFILE कमांड का उपयोग कर CSV फ़ाइल आयात करते हैं। इससे पहले कि आप इस आदेश, प्रकार निष्पादित करें:

SET sql_mode = ''; 

अधिक विभिन्न SQL मोड के बारे में जानकारी documentation में पाया जा सकता।

+1

हाँ आप सही हैं। यह पूरी तरह से काम करता है। मैं थोड़ा परेशान हूं कि क्यों सेटिंग नहीं थी, लेकिन लोड डेटा कमांड काम करने से पहले इस अधिकार को बुलाया। धन्यवाद। – Orlan

+0

लिंक मर चुका है। [दस्तावेज़ीकरण के लिए यहां क्लिक करें] (https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-setting) और ** सर्वर एसक्यूएल मोड का विवरण ** – gentleboy

1

आप मूल्यों को सही करने के लिए आपको LOAD DATA INFILE कथन संशोधित कर सकते हैं। इन लाइनों के साथ कुछ काम करना चाहिए।

LOAD DATA INFILE 'filepath.csv' 
INTO TABLE MyTable(Column1,@Col2,@Col3) 
SET Column2=CASE WHEN @Col2 = '' THEN 0 ELSE @Col2 END 
,Column3=CASE WHEN @Col3 = '' THEN 0 ELSE @Col3 END; 

इस क्वेरी मूल्य का आयात करता है के रूप में स्तम्भ 1 में है, और सुधारों कॉलम 2 और 3 इस का उपयोग के लिए मूल्यों, आप सख्त मोड अक्षम करने की जरूरत नहीं है, और आप क्या डेटा के नियंत्रण में वास्तव में कर रहे आपके डेटाबेस में जाता है, इसे विश्वसनीय तरीके से ठीक करने में सक्षम हैं। आप दिनांक स्वरूपों को बदलने या हेक्स एन्कोडेड ब्लॉब मानों को आयात करने के लिए इस सुविधा का भी उपयोग कर सकते हैं। बहुत उपयोगी सुविधा।

+0

अच्छा समाधान । मुझे नहीं पता था कि इस बिंदु पर डेटा प्रवाह को संसाधित करना संभव है। – jkrcma

0

मैं इसे एक उत्तर में डाल रहा हूं क्योंकि मुझे अभी तक "होल्डिंग" सेटिंग के बारे में आपके अनुवर्ती प्रश्न पर टिप्पणी करने का प्रतिनिधि नहीं है। यह MySQL के साथ मेरा अनुभव रहा है कि कॉन्फ़िगरेशन फ़ाइल में सेटिंग्स केवल सर्वर शुरू करने पर पढ़ी जाती हैं ताकि आपको नई सेटिंग्स को प्रभावी होने के लिए सर्वर को पुनरारंभ करना होगा।

सर्वर डिमन है कि कमांड लाइन क्लाइंट कमांड चलाते समय संचार करता है ताकि कमांड लाइन क्लाइंट को पुनरारंभ करना वास्तव में सर्वर को पुनरारंभ नहीं करता है।

इस उत्तर में एक और विस्तृत स्पष्टीकरण प्रदान किया गया है: https://serverfault.com/a/79051

1

मैं इसे ऐसा करने की जरूरत है, और सही ढंग से काम: रूट के रूप में अपने सर्वर में

  1. सख्त एसक्यूएल मोड को अक्षम करने के लिए SSH
  2. इस फ़ाइल बनाएँ: /etc/mysql/conf.d/ disable_strict_mode।

    [mysqld] sql_mode = IGNORE_SPACE, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

  3. पुनः प्रारंभ इस आदेश के साथ MySQL: sudo सेवा cnf

  4. ओपन फाइल और इन दो पंक्तियों में प्रवेश mysql

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