2016-10-06 9 views
6

कुछ पृष्ठभूमि यूनिक्स टाइमस्टैम्प स्टोर करने के लिए:कैसे MySQL के साथ

मेरी वेबसाइट अलग समय क्षेत्रों के सभी प्रकार भर में उन समन्वय पर निर्भर है।

मैं क्लाइंट पर सर्वर पक्ष और moment.js पर अपने समय क्षेत्र रूपांतरण और गणना को संभालने के लिए कार्बन का उपयोग कर रहा हूं।

परिणामस्वरूप डिजाइन पसंद किया गया था कि सभी दिनांक समय (जैसे किसी ईवेंट का प्रारंभ समय) यूनिक्स टाइमस्टैम्प के रूप में संग्रहीत किया जाएगा।

समस्या

मैं थोड़ा एक "टाइमस्टैम्प 'की परिभाषा से उलझन में हूँ।

2016-10-06 20:50:46 

तो अगर आप वर्तमान टाइमस्टैम्प का एक डिफ़ॉल्ट क्षेत्र करना चाहते हैं तो आप जीएमटी में वर्तमान दिनांक मिलती है: PHPMyAdmin में टाइमस्टैम्प एक यूनिक्स टाइमस्टैम्प बल्कि एक दिनांक स्वरूप नहीं है।

यह चीजें अधिक एक यूनिक्स टाइमस्टैम्प पूर्णांक की तुलना में एक उपयोगकर्ता समयक्षेत्र में वापस कन्वर्ट करने के लिए जटिल बना देता है ...

प्रश्न:

क्या फ़ील्ड प्रकार मैं के रूप में मेरे यूनिक्स टाइमस्टैम्प संग्रहीत करना चाहिए, वर्तमान में मैं none के डिफ़ॉल्ट के साथ int(11) का उपयोग कर रहा हूँ। विस्तार से ... क्या MySQL में डिफ़ॉल्ट रूप से वर्तमान यूनिक्स टाइमस्टैम्प (उदा। 1475971200) को स्टोर करने का कोई तरीका है?

+1

आप से और यूनिक्स टाइमस्टैम्प के दिनांक परिवर्तित करके समस्या को नाकाम कर सकते हैं। तो एक यूनिक्स टाइमस्टैंप डालने के लिए, आप अपनी तालिका में एक DATETIME फ़ील्ड बनाएंगे, और यूनिक्स टाइमस्टैम्प को 'FROM_UNIXTIME (1514789942)' के साथ कनवर्ट करेंगे। फिर जब आप यूनिक्स टाइमस्टैम्प में मान वापस प्राप्त करना चाहते हैं तो आप 'UNIX_TIMESTAMP (my_datetime_field) चुनें' – Jacques

उत्तर

10

एक यूनिक्स टाइमस्टैम्प एक बड़ा पूर्णांक है (1 9 70-01-01 00:00:00 यूटीसी के बाद से सेकंड की संख्या), इसलिए INT(11) सही डेटाटाइप है।

दुर्भाग्य से, मुझे नहीं लगता कि डिफ़ॉल्ट टाइम निर्दिष्ट करने का कोई तरीका है जो वर्तमान टाइमस्टैंप डालेगा। डालने के दौरान आपको UNIX_TIMESTAMP() को स्पष्ट रूप से कॉल करने की आवश्यकता होगी, और इसका उपयोग करें। DEFAULT विनिर्देशों में फ़ंक्शन कॉल की अनुमति नहीं है।

2

आप एक हस्ताक्षरित आईएनटी का उपयोग करना जारी रख सकते हैं, लेकिन आपको मैन्युअल रूप से डालने पर टाइमस्टैम्प सेट करना होगा (UNIX_TIMESTAMP())।

या आप डिफ़ॉल्ट CURRENT_TIMESTAMP (जो पर्दे के पीछे एक पूर्णांक के रूप में संग्रहीत किया जाता है) के साथ TIMESTAMP प्रकार का उपयोग कर सकते हैं और यह एक पूर्णांक में बदलने का चयन करते:
SELECT UNIX_TIMESTAMP(foo_field) FROM foo_table

संदर्भ - Is it possible to create a column with a UNIX_TIMESTAMP default in MySQL?

0

असल में, आप क्योंकि int(11) के लिए अधिकतम 2'147'483'647 (अधिक जानकारी here) है या तो bigint या varchar उपयोग करना होगा।

फिर, जैसा कि पिछले जवाब कहते हैं, तो आप मैन्युअल डालने के लिए UNIX_TIMESTAMP()

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