MySQL 5.5 में CURRENT_TIMESTAMP को डिफ़ॉल्ट तिथि नहीं दी जा सकती


18

मैं Current_timestampडिफ़ॉल्ट मान के रूप में सेट करने में सक्षम नहीं हूं । मेरे Mysqlसंस्करण है 5.5.47

प्रश्न है

ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;

यहाँ छवि विवरण दर्ज करें

जबकि यह मेरे स्थानीय डीबी के साथ ठीक काम कर रहा है mysql V5.6.56


समस्या माइस्सेल नए संस्करणों में डिफ़ॉल्ट मूल्य में जोड़े गए माइक्रोसेकंड के कारण है। समाधानों के लिए tekina.info/… देखें ।
अनिकेत सिंह

जवाबों:


25

से MySQL 5.5 मैनुअल :

आप किसी फ़ंक्शन (जैसे) या CURRENT_DATE के मान के लिए दिनांक स्तंभ के लिए डिफ़ॉल्ट सेट नहीं कर सकते हैं। अपवाद यह है कि आप TIMESTAMP स्तंभ के लिए CURRENT_TIMESTAMP को डिफ़ॉल्ट के रूप में निर्दिष्ट कर सकते हैं।

इसलिए, आप जो प्राप्त करना चाहते हैं वह MySQL 5.5 में काम करेगा यदि आप एक TIMESTAMPकॉलम के बजाय एक कॉलम जोड़ते हैं DATE

5.6.x में परिवर्तन है कि कार्यक्षमता प्रलेखित हैं अनुमति देते हैं यहां , और मैं पूर्णता के लिए प्रासंगिक सारांश उद्धृत करता हूँ:

MySQL 5.6.5 के अनुसार, TIMESTAMP और DATETIME कॉलम को स्वचालित रूप से प्रारंभिक तिथि और वर्तमान दिनांक और समय पर अद्यतन किया जा सकता है (अर्थात, वर्तमान टाइमस्टैम्प)। 5.6.5 से पहले, यह केवल TIMESTAMP के लिए, और प्रति तालिका में सबसे अधिक TIMESTAMP स्तंभ के लिए सही है।


8

इस उत्तर की जाँच करें

आपके विकल्प हैं:

  • MySQL 5.6.5 में अपग्रेड करें
  • कॉलम प्रकार को TIMESTAMP में बदलें, जैसे:

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
  • स्वचालित रूप से स्तंभ को अद्यतन करने वाला एक त्रिगुट बनाएँ:

    ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
                                                      -- NULLs or default
                                                      -- to a special value
    DROP TRIGGER IF EXISTS downloads_BI;
    DELIMITER //
    CREATE TRIGGER downloads_BI
    BEFORE INSERT ON downloads FOR EACH ROW
    BEGIN
        IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
            SET NEW.date = now();
        END IF;
    END//
    DELIMITER ;

    आप अपडेट वैल्यू बनाना चाहते हैं, वह भी, यदि यह अपडेट पर अपने आप अपडेट होना चाहिए या अशक्त मूल्यों को रोकना चाहता है।

    mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT * FROM downloads;
    +------+---------------------+
    | i    | date                |
    +------+---------------------+
    |    1 | 2016-03-22 09:27:52 |
    +------+---------------------+
    1 row in set (0.00 sec)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.