2012-10-25 24 views
16

Varolan bir veritabanında, yaşı yaşıyorum (INT). Şimdi bunu dob olarak ayarlamalıyım (DATETIME).MySQL varsayılan tarih yolu phpmyadmin üzerinden

Ben, PHPMyAdmin aracılığıyla bunu yaparken answer with 138 upvotes tarafından tanımlanan varsayılan değer olarak current_timestamp vererek deneyin. Ancak PHPMyAdmin ekli ekran görüntüsünde olduğu gibi #1067 - invalid default value for 'dob' şikayet ediyor:

Error screenshot

birisi önermek misiniz nasıl bunu düzeltmek için bu hata alıyorum ve ben neden? Varsayılan değer current_time tip DATETIME için geçerli olmadığından

+6

doğum tarihi geçerli saat varsayılan değer olarak nasıl olabilir merak ediyor musunuz? –

+0

[DATETIME Vs TIMESTAMP] (http://stackoverflow.com/questions/409286/datetime-vs-timestamp) –

+0

@Mithun. Sadece geçici değer. daha sonra diğer değerler ile değişecektir. –

cevap

18

You can't set CURRENT_TIMESTAMP.

Ancak bunu TIMESTAMP ile yapabilirsiniz.

here farkına bakın. this blogda

bir veri türü şartnamede DEFAULT değer hükmü gelen

Kelimeler bir sütun için varsayılan değer gösterir. Bir istisna ile, varsayılan değer sabit olmalıdır; Bir işlev veya ifade olamaz.

Bu tür NOW() veya CURRENT_DATE olarak bir fonksiyonun değeri olarak bir tarih sütun için varsayılan ayarlamak olamaz, örneğin, anlamına gelir.

istisna bir TIMESTAMP sütun için varsayılan olarak current_timestamp belirtebilmenizdir.

+0

Teşekkürler. Null'ı geçici değer olarak kullandım. Başlangıçta 'null' değil ve geçerli tarihi varsayılan değer olarak kullanmaya çalışıyorum ama mümkün görünmüyordu. Geçici olarak boşa izin verildi ve çalıştı. –

0

O hata alıyorsanız. Söylediği şey bu, ve devam ediyor. Üzerinde current_time kullanabilirsiniz

tek alan bir zaman damgası olduğunu. DATETIME ile varsayılan değer olarak

2

Bunu mysql tarihiyle başarabileceğinizi düşünmüyorum. Çok TIMESTAMP olarak alanın türünü ayarlayın

/************ ROLE ************/ 
drop table if exists `role`; 
create table `role` (
    `id_role` bigint(20) unsigned not null auto_increment, 
    `date_created` datetime, 
    `date_deleted` datetime, 
    `name` varchar(35) not null, 
    `description` text, 
    primary key (`id_role`) 
) comment=''; 

drop trigger if exists `role_date_created`; 
create trigger `role_date_created` before insert 
    on `role` 
    for each row 
    set new.`date_created` = now(); 
0

DateTime en iyi yolu, bir tetikleyici kullanmaktır .. damgası kullanabilir veya bu yaklaşımı denemek zorunda.

enter image description here

0

: Sen

CREATE TRIGGER table_OnInsert BEFORE INSERT ON `DB`.`table` 
FOR EACH ROW SET NEW.dateColumn = IFNULL(NEW.dateColumn, NOW());