Php का उपयोग करके mysql तालिका में टाइमस्टैम्प को सहेजना


94

मेरे पास एक MySQL तालिका में एक फ़ील्ड है जिसमें एक timestampडेटा प्रकार है। मैं उस तालिका में डेटा सहेज रहा हूं। लेकिन जब मैं टाइमस्टैम्प ( 1299762201428) को रिकॉर्ड में पास करता हूं , तो यह स्वचालित रूप से 0000-00-00 00:00:00उस तालिका में मान को बचाता है ।

मैं एक MySQL तालिका में टाइमस्टैम्प को कैसे स्टोर कर सकता हूं?

यहाँ मेरा INSERTबयान है:

INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
       (2,5,9,'2',1299762201428,5,10,20,'1')

1
आप किस टाइमस्टैम्प की बात कर रहे हैं? आपको यह कहाँ से मिला?
आपका कॉमन सेंस

1
क्या आप यहां उर टेबल संरचना पेस्ट कर सकते हैं?

जवाबों:


160

इस तरह से पास करो

date('Y-m-d H:i:s','1299762201428')

7
लेकिन db में आपको जो मूल्य मिलता है वह कॉलम प्रकार को दर्शाता है datetime, यदि आप इसे बदलना चाहते हैं timestampतो कॉलम प्रकार को बदलकरvarchar(15)
jimy

2
फिर इसे एक INT फ़ील्ड पर रखें। वैसे भी, एक टाइमस्टैम्प केवल एक तारीख का प्रतिनिधित्व है, और इसके विपरीत। आप टाइमस्टैम्प से आज तक के फंक्शन के साथ बदल सकते हैं strtotime। संपादित करें: btw, टाइमस्टैम्प केवल सभी संभावित तिथियों की एक श्रृंखला को शामिल करता है (1970-01-01 से xx-xx-2032 मुझे लगता है)
कार्लोस कैंपड्रेस्स

4
तो टाइमस्टैम्प डेटाटाइप का उपयोग क्या है? s_time फ़ील्ड में टाइमस्टैम्प डेटाटाइप है। क्या मैं उस क्षेत्र में 1299762201428 को नहीं बचा सकता हूँ?
गौतमलकुम

@ lakum4stackof: टाइमस्टैम्प डेटाटाइप के लिए, कृपया विस्तार के लिए dev.mysql.com/doc/refman/5.0/en/timestamp.html देखें ।
रोलिंगबाय

1
@ lakum4stackof - टाइमस्टैम्प का उपयोग यह है कि आप टाइमस्टैम्प को बचाते हैं, लेकिन यह केवल दिनांक के रूप में प्रदर्शित होता है। आंतरिक रूप से (सभी डेटा प्रकारों के रूप में) इसे हस्ताक्षरित पूर्णांक के रूप में संग्रहीत किया जाता है। यदि आप भी उस टाइमस्टैम्प को पूर्णांक के रूप में प्रारूपित करना चाहते हैं, तो मेरा सुझाव है कि आप केवल INT फ़ील्ड का उपयोग करें। टाइमस्टैम्प कॉलम का उपयोग करने की तारीख में हेरफेर है (अंतराल और ऐसे जोड़ते हुए)।
माइकल जेवी

51

अरे, इसके लिए FROM_UNIXTIME()फ़ंक्शन का उपयोग करें।

ऐशे ही:

INSERT INTO table_name
(id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES
(1,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1'), 
(2,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1')

इससे बेहतर क्यों है date('Y-m-d H:i:s','1299762201428')?
यूरी

5
प्रकार की सुरक्षा: FROM_UNIXTIMEphp का date()रिटर्न एक स्ट्रिंग होने पर एक मूल mysql दिनांक प्रकार देता है।
रिचर्ड टूइन

5
यह बेहतर है क्योंकि वेब सर्वर (PHP) और MySQL अलग-अलग जगहों पर हो सकते हैं। तो, तारीख ('Ymd H: i: s', '1299762201428') वेब सर्वर का टाइमजोन सेट करेगी। विभिन्न क्षेत्रों में रखे गए विभिन्न वेब सर्वरों के साथ आपके पास असंगत डेटा होगा। वैकल्पिक रूप से, आपके कोड में, आपको MySQL के टाइमज़ोन पर एप्लिकेशन टाइमज़ोन को लागू करना होगा। date_timezone_set
ओस्टिको


15

स्पष्ट करने के लिए कुछ बातें:

  • MySQL टाइमस्टैम्प फ़ील्ड प्रकार यूनिक्स टाइमस्टैम्प को संग्रहीत नहीं करता है, बल्कि एक डेटाटाइम-प्रकार का मान है।
  • UNIX टाइमस्टैम्प एक नियमित इंट प्रकार का एक नंबर है।
  • जिस टाइमस्टैम्प की आप बात कर रहे हैं, वह नियमित यूनिक्स टाइमस्टैम्प नहीं है, बल्कि मिलीसेकंड वाला टाइमस्टैम्प है।

इसलिए सही उत्तर होगा

$timestamp = '1299762201428';
$date = date('Y-m-d H:i:s', substr($timestamp, 0, -3));

3

डेटाटाइप ' bigint अहस्ताक्षरित ' इस आवश्यकता के अनुरूप हो सकता है।


2

मैं अनुमान लगा रहा हूं कि जिस क्षेत्र में आप मूल्य को बचाने की कोशिश कर रहे हैं वह एक डेटाइम क्षेत्र है, लेकिन ऐसा नहीं है कि टाइमस्टैम्प के लिए भी यही सच है । यदि ऐसा है तो mysql प्रारूप को वर्ष-माह-दिन घंटे: मिनट: सेकंड होने की उम्मीद करता है। टाइमस्टैम्प को बचाने के लिए आपको एक क्वेरी का उपयोग करके फ़ील्ड को संख्यात्मक में बदलना होगा

alter table <table_name> change <field> <field> bigint unsigned

यदि आप वर्तमान समय का उपयोग कर रहे हैं, तो आप अभी () या current_timestamp का उपयोग कर सकते हैं।


2

आप now()अपनी क्वेरी में भी उपयोग कर सकते हैं , अर्थात:

insert into table (time) values(now());

यह वर्तमान टाइमस्टैम्प का उपयोग करेगा।


1

का उपयोग करें FROM_UNIXTIME()

नोट: 1299762201428 एक मिलीसेकंड-टाइमस्टैम्प (जैसे जावास्क्रिप्ट में दिनांक () * 1) की तरह दिखता है, और आपको संभवतः इसे 1000 से विभाजित करना होगा।


1

तालिका में फ़ील्ड प्रकार की जाँच करें जैसे डेटेटाइप में समय स्टैम्प मान को बचाने के लिए जैसे bigintआदि।

datetimeटाइप नहीं



0

यदि टाइमस्टैम्प मौजूदा समय है, तो आप mysql NOW()फ़ंक्शन का उपयोग कर सकते हैं


0

datetimeफ़ील्ड प्रकार का उपयोग करें । यह मानव पठनीयता (टाइमस्टैम्प नहीं पढ़ता है) और MySQL फ़ंक्शन जैसे कई फायदे के साथ आता है ।

यूनिक्स टाइमस्टैम्प से परिवर्तित करने के लिए, आप MySQL फ़ंक्शन का उपयोग कर सकते हैं FROM_UNIXTIME(1299762201428)। वापस बदलने के लिए आप उपयोग कर सकते हैं UNIX_TIMESTAMP: SELECT UNIX_TIMESTAMP(t_time) FROM table_name

बेशक, यदि आपको MySQL फ़ंक्शन पसंद नहीं है, तो आप हमेशा PHP का उपयोग कर सकते हैं 'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp):।


timestamp फ़ील्ड प्रकार (का उपयोग करते समय भी मानव पठनीय है SELECTकंसोल में)। वे बहुत अलग हैं और दोनों के अपने डिस / फायदे हैं। मुख्य अंतर यह है कि समय क्षेत्र को कैसे संभाला जा रहा है।
उडो जी

@ यू जी: आप सही हैं, लेकिन मैं अभी भी datetimeविभिन्न कारणों से पसंद करता हूं । आपकी राय में सबसे बड़ा डिस / फायदा क्या है?
ज़्नर्कस

इसके लिए सबसे बड़ा लाभ timestamp: यह बेहतर रूप से PHP टाइमस्टैम्प से मेल खाता है क्योंकि यह सर्वर और क्लाइंट दोनों के समय क्षेत्र सेटिंग्स के लिए प्रतिरक्षा है, जबकि datetimeयह परिवर्तन आपके MySQL क्लाइंट के समय क्षेत्र के आधार पर प्रदर्शित मूल्य है (बेशक यह आपकी परियोजना पर निर्भर करता है, जो एक बेहतर है)। इसके लिए सबसे बड़ा नुकसान timestamp: यह NULL मानों का समर्थन नहीं करता है और (मुझे नहीं पता कि जब उन्होंने यह प्रोग्राम किया तो उन्होंने धूम्रपान क्या किया) एक TIMESTAMP NOT NULLक्षेत्र बन जाता है TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP। मेरे मामले में मुझे दुर्भाग्य से टीबी कारणों के लिए उपयोग करने की आवश्यकता है TIMESTAMP
उडो जी

0

बेहतर उपयोग डेटाटाइप है varchar(15)


3
स्ट्रिंग के रूप में एक संख्या को सहेजना आमतौर पर एक अच्छा विकल्प नहीं है, क्योंकि स्ट्रिंग्स की तुलना में धीमी और गणना करने के लिए कठिन है।
रोलिंगबॉय

मेरा वोट अहस्ताक्षरित के लिए जाता है - लेकिन चलो खरगोश के छेद के नीचे जाते हैं। वरचर और चार क्यों नहीं? यह एक निश्चित लंबाई प्रविष्टि है- माइक्रो-ऑप्टिमाइज़ेशन, लेकिन फिर भी ...
ब्रैडकिसने79


-1

अगर मुझे पता है कि डेटाबेस MySQL है, तो मैं इस तरह अब () फ़ंक्शन का उपयोग करूंगा:

INSERT INTO table_name
   (id, name, created_at) 
VALUES 
   (1, 'Gordon', NOW()) 

यह वर्तमान टाइमस्टैम्प को केवल स्टोर करेगा, सख्ती से नहीं जो ओपी पूछ रहा है।
चार्लीफोर्ट्यून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.