2015-12-22 12 views
6

मैं मैंकॉलम टाइमस्टैम्प डिफ़ॉल्ट current_date के साथ mysql तालिका कैसे बनाएं?

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_DATE(), 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

कोशिश, लेकिन यह एक त्रुटि

Query: CREATE TABLE `visitors` (`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `ip` VARCHAR(32) NOT NULL, `browser` VARCHAR(500) NO... 

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE() NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1' at line 7 

Execution Time : 0 sec 
Transfer Time : 0 sec 
Total Time  : 0.063 sec 

समस्या क्या है writting है स्तंभ CURRENT_DATE()

पर डिफ़ॉल्ट मान के साथ mysql तालिका बनाने के लिए की जरूरत है?

मैं विशिष्ट आवृत्तियां करने की जरूरत है केवल पूर्ण समय की जानकारी के साथ नहीं की तारीख ...

क्या आप मेरी मदद कर सकते हैं?

+0

यह एक 'TIMESTAMP' स्तंभ के डिफ़ॉल्ट व्यवहार है। आपको इस मामले में वास्तव में 'DEFAULT' निर्दिष्ट करने की आवश्यकता नहीं है। – eggyal

+0

TIMESTAMP और DATE में एक ही प्रारूप नहीं है, टाइमस्टैम्प एक संख्या है जबकि दिनांक एक स्वरूपित दिनांक है। एक या दूसरे चुनें। – Anton

+0

यदि आप केवल वर्ष, महीने और दिन की आवश्यकता नहीं है, तो आप 'तारीख' तिथि का प्रयास क्यों नहीं करते हैं, न कि अंतिम तिथि CURRENT_DATE() '। –

उत्तर

14

उपयोग CURRENT_TIMESTAMP बजाय समारोह CURRENT_DATE() समारोह

इस प्रयास करें:

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 
+0

कोई CURRENT_TIMESTAMP घंटे, मिनट और सेकेंड के साथ पूर्णकालिक सूचनाएं सेट कर रहा है। मुझे केवल वर्ष, महीने और दिन की आवश्यकता है –

+0

एक विकल्प इसे टाइमस्टैम्प के रूप में सेट करना है, जैसा कि दिखाया गया है, लेकिन जब आप वास्तव में डेटा पुनर्प्राप्त करते हैं, तो बस इसे एक तिथि के रूप में डालें, जो घंटों, मिनट और सेकंड को छोटा कर देगा।'दिनांक चुनें (' तारीख') 'इसे उस प्रारूप में वापस कर देगा जो आप चाहते हैं, जबकि कॉलम के लिए इच्छित व्यवहार को अभी भी संरक्षित करना। – Redbeard011010

+0

मैं समझता हूं लेकिन मुझे वर्ष, महीने और दिनांक के साथ अद्वितीय आईपी की आवश्यकता है, इसलिए यदि मैं 2-3 सेकंड पहले इसे टाइमस्टैम्प के रूप में अनूठा करता हूं तो यह फिर से नई पंक्ति डालेगा ... मुझे आईपी होने पर रीफ्रेश करने के बाद अद्वितीय becouse की आवश्यकता है आज मौजूद है इसे तालिका में लिखना नहीं चाहिए, इसलिए मुझे केवल दिनांक प्रारूप –

0

तुम सिर्फ() अपने प्रश्न में CURRENT_DATE() द्वारा प्रतिस्थापित करने के लिए अब है। मैंने कोशिश की और यह ठीक दिख रहा है।

+0

की आवश्यकता है() को mysql में 'CURRENT_TIMESTMAP' के रूप में माना जाएगा –

0

यह थोड़ा देर हो सकता है लेकिन मुझे लगता है कि यह किसी और के लिए सहायक हो सकता है।

मेरे दृष्टिकोण() इस तरह getdate उपयोग करने के लिए कर दिया गया है:

[TIMESTAMP] [datetime] नहीं नल प्रतिबंध [DF_myTable_TimeStamp] डिफ़ॉल्ट (getdate())।

जहां [टाइमस्टैम्प] प्रश्न में कॉलम है। 2017/11/02 11:: 58:

परिणाम उदाहरण के लिए 34,203

इस ट्रिम करने के लिए, मैं निम्नलिखित

घोषित @mydate datetime

सेट का उपयोग @ mydate = '2017/11/02 11: 58: 34.203'

चयन try_convert (nvarchar (20), @mydate, 120)

+०१२३५१६४१०६१

यह अंतिम परिणाम है: 2017-11-02 11:58:34

You can actually set this in MSSQL Management Studio

संबंधित मुद्दे