2012-10-25 14 views
16

किसी मौजूदा डेटाबेस में, मेरे पास आयु कॉलम (INT) है। अब मुझे इसे डब (DATETIME) के रूप में सेट करने की आवश्यकता है।MySQL डिफ़ॉल्ट डेटाटाइम phpmyadmin

मैं PHPMyAdmin के माध्यम से ऐसा करने का प्रयास करता हूं, जिससे CURRENT_TIMESTAMP को answer with 138 upvotes द्वारा परिभाषित डिफ़ॉल्ट मान के रूप में दिया जाता है। हालांकि PHPMyAdmin संलग्न स्क्रीनशॉट में के रूप में #1067 - invalid default value for 'dob' शिकायत कर रहा है:

Error screenshot

कोई सुझाव है तो कृपया कर सकते हैं कारण है कि मैं कैसे है कि ठीक करने के लिए है कि त्रुटि मिल रही है और?

+6

सोच रहे हैं कि जन्म तिथि डिफ़ॉल्ट मान के रूप में वर्तमान समय हो सकती है? –

+0

[DATETIME बनाम TIMESTAMP] (http://stackoverflow.com/questions/409286/datetime-vs-timestamp) –

+0

@ मिथुन। बस अस्थायी मूल्य। बाद में अन्य मूल्यों के साथ बदल जाएगा। –

उत्तर

18

You can't set CURRENT_TIMESTAMP DATETIME के ​​साथ डिफ़ॉल्ट मान के रूप में।

लेकिन आप इसे TIMESTAMP के साथ कर सकते हैं।

अंतर here देखें। this ब्लॉग

एक डेटा प्रकार विनिर्देश में डिफ़ॉल्ट मान खंड से

शब्द एक स्तंभ के लिए कोई डिफ़ॉल्ट मान इंगित करता है। एक अपवाद के साथ, डिफ़ॉल्ट मान स्थिर होना चाहिए; यह एक समारोह या अभिव्यक्ति नहीं हो सकता है।

इसका मतलब है, उदाहरण के लिए, कि आप किसी दिनांक कॉलम के लिए डिफ़ॉल्ट (जैसे) (CURRENT_DATE) जैसे फ़ंक्शन का मान निर्धारित नहीं कर सकते हैं।

अपवाद यह है कि आप TIMESTAMP कॉलम के लिए डिफ़ॉल्ट के रूप में CURRENT_TIMESTAMP निर्दिष्ट कर सकते हैं।

+0

धन्यवाद। मैं अस्थायी मूल्य के रूप में शून्य इस्तेमाल किया। प्रारंभ में मैं 'शून्य नहीं' के माध्यम से जाने और वर्तमान दिनांक का उपयोग डिफ़ॉल्ट मान के रूप में करने का प्रयास कर रहा था लेकिन ऐसा लगता है कि यह संभव नहीं है। अस्थायी रूप से अनुमति दी गई और यह काम किया। –

0

आपको वह त्रुटि मिल रही है क्योंकि डिफ़ॉल्ट मान current_timeDATETIME प्रकार के लिए मान्य नहीं है। यही वह कहता है, और यही चल रहा है।

एकमात्र क्षेत्र जिसे आप current_time पर उपयोग कर सकते हैं, एक टाइमस्टैम्प है।

2

मुझे नहीं लगता कि आप इसे mysql दिनांक से प्राप्त कर सकते हैं।

/************ 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

दिनांक समय के लिए सबसे अच्छा तरीका है एक उत्प्रेरक का उपयोग है।

enter image description here

0

भी TIMESTAMP के रूप में क्षेत्र के प्रकार सेट करें: आप .. टाइमस्टैम्प का उपयोग करें या इस तरीके का प्रयास करने के लिए

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