পিএইচপি ব্যবহার করে মাইএসকিএল টেবিলের টাইমস্ট্যাম্প সংরক্ষণ করা


95

আমার একটি মাইএসকিউএল টেবিলের একটি ক্ষেত্র রয়েছে যার একটি timestampডাটা টাইপ রয়েছে। আমি সেই টেবিলের মধ্যে ডেটা সংরক্ষণ করছি। কিন্তু যখন আমি 1299762201428রেকর্ডটিতে টাইমস্ট্যাম্প ( ) পাস করি , এটি স্বয়ংক্রিয়ভাবে 0000-00-00 00:00:00সেই টেবিলের মধ্যে মানটি সংরক্ষণ করে ।

আমি কীভাবে একটি মাইএসকিউএল টেবিলে টাইমস্ট্যাম্প সংরক্ষণ করতে পারি?

আমার 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')

4
আপনি কোন টাইমস্ট্যাম্পের কথা বলছেন? কোথায় পেলেন?
আপনার কমন সেন্স

4
আপনি কি এখানে টেবিলের কাঠামো আটকাতে পারবেন?

উত্তর:


162

এইভাবে পাস

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

7
তবে ডিবিতে প্রাপ্ত মানটি কলামের ধরণটি দেখায় datetime, যদি আপনি এটি পরিবর্তন করতে চান timestampতবে কলামের varchar(15)
ধরণটি

4
তারপরে এটি একটি INT মাঠে রাখুন। যাইহোক, একটি টাইমস্ট্যাম্প কেবল একটি তারিখের উপস্থাপনা এবং তদ্বিপরীত। জিমি আপনাকে যে ফাংশনটি বলেছিল তার সাথে আপনি টাইমস্ট্যাম্প থেকে ডেটে রূপান্তর করতে পারেন এবং এর সাথে অন্যভাবে strtotime। সম্পাদনা: বিটিডব্লিউ, টাইমস্ট্যাম্প কেবল সমস্ত সম্ভাব্য তারিখের বিস্তৃত (1970-01-01 থেকে xx-xx-2032 আমার মনে হয়)
কার্লোস ক্যাম্পার্ডার

4
তাই টাইমস্ট্যাম্প ডেটাটাইপ ব্যবহার কি? s_টাইম ক্ষেত্রে টাইমস্ট্যাম্প ডেটাটাইপ রয়েছে। আমি কি সেই ক্ষেত্রটিতে 1299762201428 সংরক্ষণ করতে পারি না?
গৌতমলাকুম

@ lakum4stackof: টাইমস্ট্যাম্প ডেটাটাইপের জন্য, দয়া করে বিশদের জন্য dev.mysql.com/doc/refman/5.0/en/timestamp.html দেখুন
রোলিংবয়

4
@ লাকুম 4 স্ট্যাকফ - টাইমস্ট্যাম্পের ব্যবহার হ'ল আপনি টাইমস্ট্যাম্প সংরক্ষণ করেন তবে এটি কেবল একটি তারিখ হিসাবে প্রদর্শিত হয়। অভ্যন্তরীণভাবে (সমস্ত ডেটা ধরণের হিসাবে) এটি স্বাক্ষরিত পূর্ণসংখ্যা হিসাবে সংরক্ষণ করা হয়। আপনি যদি সেই টাইমস্ট্যাম্পটিকে পূর্ণসংখ্যা হিসাবে ফর্ম্যাট করতে চান তবে আমি প্রস্তাব দিচ্ছি যে আপনি কেবল তখন INT ফিল্ডটি ব্যবহার করুন। টাইমস্ট্যাম্প কলামের ব্যবহার হ'ল তারিখের কারসাজি (অন্তর এবং এগুলি যুক্ত করে)।
মাইকেল জেভি

52

আরে সেখানে, ব্যবহার করুন 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_UNIXTIMEপিএইচপি-র date()একটি স্ট্রিং ফেরত দেওয়ার সময় নেটিভ মাইএসকিএল তারিখের প্রকার পাওয়া যায় ।
রিচার্ড টুইন

5
এটি আরও ভাল কারণ ওয়েব সার্ভার (পিএইচপি) এবং মাইএসকিউএল বিভিন্ন স্থানে থাকতে পারে। সুতরাং, তারিখ ('Ymd H: i: s', '1299762201428') ওয়েব সার্ভারের সময় অঞ্চল নির্ধারণ করবে। বিভিন্ন জোনে স্থাপন করা বিভিন্ন ওয়েব সার্ভারের সাথে আপনার বেমানান ডেটা থাকবে। বিকল্পভাবে, আপনার কোডে, আপনাকে অ্যাপ্লিকেশন টাইমজোনকে মাইএসকিউএল এর টাইমজোনটিতে বাধ্য করতে হবে। তারিখ_টাইমজোন_সেট
অস্টিকো


15

স্পষ্ট করার জন্য কয়েকটি বিষয়:

  • মাইএসকিউএল টাইমস্ট্যাম্প ক্ষেত্রের ধরণটি ইউনিক্স টাইমস্ট্যাম্পগুলি সংরক্ষণ করে না বরং তারিখের মতো ধরণের মান।
  • ইউনিক্স টাইমস্ট্যাম্প নিয়মিত ইন টাইপের একটি সংখ্যা।
  • আপনি যে টাইমস্ট্যাম্পের কথা বলছেন তা নিয়মিত ইউনিক্স টাইমস্ট্যাম্প নয় বরং মিলিসেকেন্ড সহ একটি টাইমস্ট্যাম্প।

সুতরাং সঠিক উত্তর হবে

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

3

ডেটাটাইপ ' বিগিন্ট স্বাক্ষরযুক্ত ' এই প্রয়োজন অনুসারে করতে পারে।


3

আপনি now()আপনার ক্যোয়ারিতে পাশাপাশি ব্যবহার করতে পারেন , যেমন:

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

এটি বর্তমান টাইমস্ট্যাম্পটি ব্যবহার করবে।


2

আমি অনুমান করছি যে ক্ষেত্রটি আপনি মানটি সংরক্ষণের চেষ্টা করছেন এটি একটি তারিখের সময় ক্ষেত্র নয় এটি টাইমস্ট্যাম্পগুলির ক্ষেত্রে একই বলে মনে হচ্ছে । যদি তাই মাইএসকিএল প্রত্যাশা করে যে ফর্ম্যাটটি বছরের-মাস-দিনের সময়: মিনিট: দ্বিতীয় হবে। টাইমস্ট্যাম্প বাঁচাতে আপনাকে এই জাতীয় একটি কোয়েরি ব্যবহার করে ক্ষেত্রটিকে সংখ্যায় রূপান্তর করতে হবে

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

আপনি যদি বর্তমান সময় ব্যবহার করেন তবে আপনি এখন () বা বর্তমান_টাইমস্ট্যাম্প ব্যবহার করতে পারেন।


1

ব্যবহার FROM_UNIXTIME()

দ্রষ্টব্য: 1299762201428 দেখতে অনেকটা মিলিসেকেন্ড-টাইমস্ট্যাম্পের মতো (জাভাস্ক্রিপ্টে তারিখ () * 1 এর মতো), এবং আপনাকে সম্ভবত এটি 1000 দ্বারা ভাগ করতে হবে।


1

টেবিলের ক্ষেত্রে ক্ষেত্রের প্রকারটি পরীক্ষা করুন যেমন ডেট্যাটাইপ bigintইত্যাদির সময় স্ট্যাম্পের মান সংরক্ষণ করুন etc.

datetimeটাইপ না



0

টাইমস্ট্যাম্পটি যদি বর্তমান সময় হয় তবে আপনি মাইএসকিএল NOW()ফাংশনটি ব্যবহার করতে পারেন


0

datetimeক্ষেত্রের ধরণ ব্যবহার করুন । এটি মানব পাঠযোগ্যতার মতো অনেক সুবিধা সহকারে আসে (টাইমস্ট্যাম্পগুলি কেউ পড়ে না) এবং মাইএসকিউএল ফাংশন

ইউনিক্স টাইমস্ট্যাম্প থেকে রূপান্তর করতে, আপনি মাইএসকিউএল ফাংশনটি ব্যবহার করতে পারেন FROM_UNIXTIME(1299762201428)। ফিরে রূপান্তর করতে আপনি ব্যবহার করতে পারেন UNIX_TIMESTAMP:SELECT UNIX_TIMESTAMP(t_time) FROM table_name

অবশ্যই, যদি আপনি মাইএসকিউএল ফাংশন মত না, আপনি সবসময় পিএইচপি ব্যবহার করতে পারে: 'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)


timestamp ক্ষেত্র প্রকার (যখন ব্যবহার অত্যধিক মানুষের পাঠযোগ্য SELECTকনসোলে)। এগুলি খুব আলাদা এবং উভয়েরই ডিস / সুবিধা রয়েছে। প্রধান পার্থক্য হ'ল কীভাবে সময় অঞ্চলগুলি পরিচালনা করা হচ্ছে।
উদো জি

@ ইউডো জি: আপনি সঠিক, তবে আমি এখনও datetimeবিভিন্ন কারণে পছন্দ করি । আপনার মতে বৃহত্তম ডিস / সুবিধা কী?
জ্নারকাস

এর জন্য সবচেয়ে বড় সুবিধা timestamp: এটি পিএইচপি টাইমস্ট্যাম্পগুলির সাথে আরও ভাল মেলে কারণ এটি সার্ভার এবং ক্লায়েন্ট উভয়েরই টাইম জোন সেটিংসের প্রতিরোধক, যেখানে datetimeএটি আপনার মাইএসকিউএল ক্লায়েন্টের টাইম জোনের উপর নির্ভর করে প্রদর্শিত মানটির পরিবর্তন করে (অবশ্যই এটি আপনার প্রকল্পের উপর নির্ভর করে যা এক ভাল)। এর জন্য সবচেয়ে বড় অসুবিধা timestamp: এটি ন্যূনাল মানগুলিকে সমর্থন করে না এবং (তারা যখন এই প্রোগ্রামিং করেছিল তখন তারা কী ধূমপান করেছিল তা আমি জানি না) একটি TIMESTAMP NOT NULLক্ষেত্র একটি হয়ে যায় TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP। আমার ক্ষেত্রে দুর্ভাগ্যক্রমে টিজেড কারণে আমার ব্যবহার করা দরকারTIMESTAMP
উদো জি

0

ডেটাটাইপ ব্যবহার করা ভাল varchar(15)


4
স্ট্রিং আকারে একটি সংখ্যা সংরক্ষণ করা ভাল অভ্যাস নয় সাধারণত স্ট্রিং তুলনায় ধীর এবং গণনা সম্পাদন করা আরও শক্ত to
রোলিংবয়

আমার ভোটটি স্বাক্ষরবিহীন স্বাক্ষরিত - তবে আসুন খরগোশের গর্তে নামি। কেন বারচর এবং চর নয়? এটি একটি নির্দিষ্ট দৈর্ঘ্যের এন্ট্রি - মাইক্রো-অপ্টিমাইজেশান, তবে এখনও ...
ব্র্যাডচেসনি 79


-1

যদি আমি জানি ডেটাবেসটি মাইএসকিউএল হয় তবে আমি এখন () এখন এই ফাংশনটি ব্যবহার করব:

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

এটি কেবল বর্তমান টাইমস্ট্যাম্প সংরক্ষণ করবে, ওপি যা চাচ্ছে তা কঠোরভাবে নয়।
Charliefortune
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.