MySQL 5.5'te CURRENT_TIMESTAMP tarihi varsayılan olarak ayarlanamaz


18

Current_timestampVarsayılan değer olarak ayarlayamıyorum . Benim Mysqlversiyonum 5.5.47.

Sorgu

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

resim açıklamasını buraya girin

İle benim yerel DB üzerinde iyi çalışıyor iken mysql V5.6.56.


Sorunun nedeni, mysql yeni sürümlerinde varsayılan değer olarak eklenen mikrosaniyelerdir. Çözümler için tekina.info/… adresine bakın .
Aniket Singh

Yanıtlar:


25

Gönderen MySQL 5.5 manuel :

Tarih sütununun varsayılan değerini NOW () veya CURRENT_DATE gibi bir işlevin değeri olarak ayarlayamazsınız. Bunun istisnası, bir TIMESTAMP sütunu için varsayılan olarak CURRENT_TIMESTAMP belirtebilirsiniz.

Bu nedenle, TIMESTAMPsütun yerine bir sütun eklerseniz, elde etmek istediğiniz şey MySQL 5.5'te çalışır DATE.

5.6.x sürümündeki işlevselliğe izin veren değişiklikler burada belgelenmiştir ve eksiksizlik için ilgili özeti alıntılayacağım:

MySQL 5.6.5 itibariyle, TIMESTAMP ve DATETIME sütunları otomatik olarak başlatılabilir ve geçerli tarih ve saate (yani, geçerli zaman damgasına) güncellenebilir. 5.6.5'ten önce, bu yalnızca TIMESTAMP ve tablo başına en fazla bir TIMESTAMP sütunu için geçerlidir.


8

Bu cevabı kontrol edin .

Seçenekleriniz:

  • MySQL 5.6.5 sürümüne yükseltme
  • Sütun türünü aşağıdaki gibi TIMESTAMP olarak değiştirin:

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
  • Sütunu otomatik olarak güncelleyen bir TETİKLEME oluşturun:

    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 ;

    Güncellemede otomatik olarak güncellenmesi gerekiyorsa veya boş değerleri önlemek istiyorsanız, bir güncelleme değeri oluşturmak isteyebilirsiniz.

    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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.