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 ;
İle benim yerel DB üzerinde iyi çalışıyor iken mysql V5.6.56.
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 ;
İle benim yerel DB üzerinde iyi çalışıyor iken mysql V5.6.56.
Yanıtlar:
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.
Bu cevabı kontrol edin .
Seçenekleriniz:
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)