tutorial - mysql w3schools




আমি কি MySQL এ ডেটাটাইম বা টাইমস্ট্যাম্প ডেটা টাইপ ব্যবহার করব? (20)

আপনি একটি datetime বা datetime ক্ষেত্র ব্যবহার করে এবং কেন (MySQL ব্যবহার করে) সুপারিশ করবেন?

আমি সার্ভার পাশে পিএইচপি সঙ্গে কাজ করছি।


2016 + : আমি যা বলি তা হল আপনার মাইস্কল টাইমজোনকে ইউটিসিতে সেট করা এবং DATETIME ব্যবহার করুন:

সাম্প্রতিক কোনও সামনের ফ্রেমওয়ার্ক (কৌণিক 1/2, প্রতিক্রিয়া, ভু, ...) সহজেই এবং স্বয়ংক্রিয়ভাবে আপনার ইউটিসি ডেটটাইম স্থানীয় সময় রূপান্তর করতে পারে।

উপরন্তু:

(যদি না আপনি আপনার সার্ভারের টাইমজোন পরিবর্তন করতে পারেন)

AngularJs সঙ্গে উদাহরণ

// back-end: format for angular within the sql query
SELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...

// font-end Output the localised time
{{item.my_datetime | date :'medium' }}

এখানে উপলব্ধ সমস্ত স্থানীয় সময় বিন্যাস: https://docs.angularjs.org/api/ng/filter/date


  1. TIMESTAMP DATETIME এর জন্য আট বাইট বনাম চার বাইট।

  2. টাইমস্ট্যাম্প ডাটাবেসের উপর হালকা এবং দ্রুত সূচী হয়।

  3. DATETIME টাইপটি যখন আপনার মূল্য এবং সময় তথ্য উভয় ধারণার প্রয়োজন হয় তখন ব্যবহার করা হয়। MySQL 'YYYY-MM-DD HH: MM: SS' ফর্ম্যাটে DATETIME মান উদ্ধার করে এবং প্রদর্শন করে। সমর্থিত পরিসীমা '1000-01-01 00:00:00' থেকে '9999-12-31 23:59:59'।

TIMESTAMP ডাটা টাইপের একটি পরিসীমা রয়েছে '1970-01-01 00:00:01' UTC থেকে '2038-01-09 03:14:07' UTC। এটি MySQL সংস্করণ এবং সার্ভারে চলমান SQL মোডের উপর নির্ভর করে পরিবর্তিত বৈশিষ্ট্য রয়েছে।

  1. TIMEATAMP সময়সীমা সেটিং দ্বারা প্রভাবিত হয় যখন DATETIME ধ্রুবক।

TIMESTAMP DATETIME এর জন্য 4 বাইট বনাম 8 বাইট।

http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

কিন্তু স্ক্রনডাইডের মত এটি 1970 এর নিচের সীমাবদ্ধতার কথা বলে। ভবিষ্যতে এমন কিছু করার পক্ষে এটি দুর্দান্ত। যদিও)


TIMESTAMP সর্বদা ইউটিসি (যা, 1970-01-01 থেকে ইউটিসি-তে, সেকেন্ডের মধ্যে চলে গেছে), এবং সার্ভারের টাইমজোনটির জন্য আপনার MySQL সার্ভার স্বয়ংক্রিয়ভাবে তারিখ / সময় রূপান্তর করে। দীর্ঘমেয়াদী, TIMESTAMP যাওয়ার উপায় কারণ আপনি জানেন যে আপনার সাময়িক তথ্য সর্বদা UTC এ থাকবে। উদাহরণস্বরূপ, আপনি যদি আপনার সার্ভারে টাইমজোন সেটিংস পরিবর্তন করেন তবে আপনি আপনার সার্ভারগুলি অন্য সার্ভারে স্থানান্তরিত করলে বা আপনার তারিখগুলি স্ক্রু করবেন না।


আপনি টেবিলে একটি আপডেট বিবৃতি করবেন যখন টাইমস্ট্যাম্প পরিবর্তন থেকে সাবধান। যদি আপনার কলাম 'নাম' (ভার্চার), 'বয়স' (int) এবং 'Date_Added' (টাইমস্ট্যাম্প) সহ একটি টেবিল থাকে এবং আপনি নিম্নলিখিত DML বিবৃতিটি চালান

UPDATE table
SET age = 30

তারপরে আপনার 'তারিখ_ যোগ করা' কলামের প্রতিটি একক মান বর্তমান টাইমস্ট্যাম্পে পরিবর্তিত হবে।


আমার অভিজ্ঞতা থেকে, যদি আপনি একটি তারিখ ক্ষেত্র চান যার মধ্যে সন্নিবেশ শুধুমাত্র একবার ঘটে এবং আপনি কোন বিশেষ কোনও আপডেট বা সেই বিশেষ ক্ষেত্রের কোনও পদক্ষেপ না চান তবে তারিখের সাথে যান।

উদাহরণস্বরূপ, একটি নিবন্ধন তারিখ ক্ষেত্রের সাথে একটি user টেবিল বিবেচনা করুন। সেই user টেবিলে, যদি আপনি কোন নির্দিষ্ট ব্যবহারকারীর সর্বশেষ লগ-ইন সময় জানতে চান তবে টাইমস্ট্যাম্প টাইপের একটি ক্ষেত্রের সাথে যান যাতে ক্ষেত্র আপডেট হয়।

যদি আপনি phpMyAdmin থেকে টেবিল তৈরি করেন তবে একটি সারি আপডেট হলে ডিফল্ট সেটিং টাইমস্ট্যাম্প ক্ষেত্র আপডেট করবে। আপনার টাইমস্ট্যাম্প দায়ের করা হলে সারি আপডেটের সাথে আপডেট করা হয় না, আপনি টাইমস্ট্যাম্প ক্ষেত্র স্বয়ংক্রিয় আপডেট পেতে নিম্নলিখিত প্রশ্নের ব্যবহার করতে পারেন।

ALTER TABLE your_table
      MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

আমি একটি শব্দার্থিক বেস এই সিদ্ধান্ত না।

যখন আমি সময় (আরো বা কম) নির্দিষ্ট বিন্দু রেকর্ড করতে হবে তখন আমি টাইমস্ট্যাম্প ব্যবহার করি। উদাহরণস্বরূপ, ডেটাবেসে কোন রেকর্ড সন্নিবেশ করা হয়েছিল বা কিছু ব্যবহারকারীর পদক্ষেপ সংঘটিত হয়েছিল।

তারিখ / সময় সেট করা এবং ইচ্ছাকৃতভাবে পরিবর্তন করা যেতে পারে যখন আমি একটি ডেটাটাইম ক্ষেত্র ব্যবহার করুন। উদাহরণস্বরূপ, যখন একটি ব্যবহারকারী পরে পরিবর্তন অ্যাপয়েন্টমেন্ট সংরক্ষণ করতে পারেন।


আমি সবসময় ইউনিট টাইমস্ট্যাম্প ব্যবহার করি, ডেটটাইম তথ্যের সাথে ডিল করার সময় স্যানিটি বজায় রাখার জন্য, বিশেষত টাইমজোনগুলির জন্য সমন্বয় সম্পাদন, তারিখগুলি যোগ / কমানোর তারিখ এবং অনুরূপ। টাইমস্ট্যাম্পগুলি তুলনা করার সময়, এটি টাইমজোন এর জটিল বিষয়গুলিকে বাদ দেয় এবং আপনার সার্ভার পার্শ্ব প্রক্রিয়াকরণে (এটি কোনও অ্যাপ্লিকেশন কোড বা ডেটাবেস ক্যোয়ারী হয় কিনা) সংস্থানগুলি সরবরাহ করার মঞ্জুরি দেয় তবে আপনি আলোর ওজন গাণিতিক ব্যবহার করে বরং ভারী তারিখ-সময় যুক্ত / বিয়োগ করুন ফাংশন।

বিবেচনার যোগ্য আরেকটি জিনিস:

আপনি যদি কোনও অ্যাপ্লিকেশন তৈরি করেন তবে লাইনের নিচে আপনার ডেটা কীভাবে ব্যবহার করতে হবে তা আপনি কখনই জানেন না। আপনি যদি বলে থাকেন, আপনার ডেটা সেটের রেকর্ডগুলির একটি গুচ্ছ তুলনা করুন, বলুন, তৃতীয় পক্ষের API থেকে আইটেমগুলির একটি গোষ্ঠী তুলুন এবং বলুন, তাদের ক্রোনিকাল অর্ডারে রাখুন, আপনি খুশি হবেন আপনার সারির জন্য ইউনিক্স টাইমস্ট্যাম্প। এমনকি যদি আপনি MySQL টাইমস্ট্যাম্পগুলি ব্যবহার করার সিদ্ধান্ত নিচ্ছেন তবে বীমা হিসাবে ইউনিক্স টাইমস্ট্যাম্পটি সংরক্ষণ করুন।


টাইমস্ট্যাম্প তথ্য টাইপ তারিখ এবং সময় সঞ্চয় করে, কিন্তু ইউটিসি ফরম্যাটে, বর্তমান টাইমজোন বিন্যাসে ডটটাইম হিসাবে নয়। এবং যখন আপনি ডেটা আনেন, তখন টাইমস্ট্যাম্প আবার বর্তমান টাইমজোন সময় রূপান্তর করে।

সুতরাং আপনি মার্কিন যুক্তরাষ্ট্রে আছেন এবং সার্ভার থেকে ডেটা পেয়েছেন যার মধ্যে মার্কিন যুক্তরাষ্ট্রের সময় অঞ্চল রয়েছে। তারপর আপনি মার্কিন সময় অঞ্চল অনুযায়ী তারিখ এবং সময় পাবেন। তার সারি আপডেট করা হয় যখন টাইমস্ট্যাম্প তথ্য টাইপ কলাম সবসময় স্বয়ংক্রিয়ভাবে আপডেট পেতে। তাই যখন কোনও নির্দিষ্ট সারি শেষবার আপডেট করা হয়েছিল তখন এটি ট্র্যাক করা যেতে পারে।

আরো বিস্তারিত জানার জন্য আপনি ব্লগ পোস্ট টাইমস্ট্যাম্প ভিএস ডেটটাইম পড়তে পারেন।


নিচের উদাহরণগুলি দেখায় কিভাবে time-zone to 'america/new_york' পরিবর্তন করার পরে মানগুলি পরিবর্তিত করে যেখানে DATETIME অপরিবর্তিত থাকে।

mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | Asia/Calcutta       |
+------------------+---------------------+

mysql> create table datedemo(
    -> mydatetime datetime,
    -> mytimestamp timestamp
    -> );

mysql> insert into datedemo values ((now()),(now()));

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 14:11:09 |
+---------------------+---------------------+

mysql> set time_zone="america/new_york";

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 04:41:09 |
+---------------------+---------------------+

আমি নিবন্ধে আমার উত্তর রূপান্তরিত করেছি যাতে আরো মানুষ এই দরকারীটি খুঁজে পেতে পারে, মাইএসকিউএল: ডেটাটাইম ভার্সন টাইমস্ট্যাম্প ডেটা প্রকার


মাইএসকিউএল 5 এবং তারপরে , টাইমস্ট্যাম্প মানগুলি বর্তমান সময় অঞ্চল থেকে স্টোরেজের জন্য ইউটিসি তে রূপান্তরিত হয় এবং পুনরুদ্ধারের জন্য বর্তমান সময়ের অঞ্চল থেকে UTC থেকে রূপান্তরিত হয়। (এটি শুধুমাত্র TIMESTAMP ডেটা টাইপের জন্য ঘটে এবং DATETIME এর মতো অন্যান্য প্রকারের জন্য নয় ।)

ডিফল্টরূপে, প্রতিটি সংযোগের জন্য বর্তমান সময় অঞ্চল সার্ভারের সময়। MySQL সার্ভার টাইম জোন সাপোর্টে বর্ণনা অনুযায়ী টাইম জোন প্রতি-সংযোগ ভিত্তিতে সেট করা যেতে পারে।


মাইএসকিউএল এবং পিএইচপি দিয়ে কাজ করার সময় আমি সবসময় ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করব। এটির মূল কারণ হচ্ছে পিএইচপি-এ ডিফল্ট date পদ্ধতিটি প্যারামিটার হিসাবে টাইমস্ট্যাম্প ব্যবহার করে, সুতরাং কোনও প্যারিসিং প্রয়োজন হবে না।

পিএইচপি বর্তমান ইউনিক্স টাইমস্ট্যাম্প পেতে, শুধু time();
এবং MySQL এ SELECT UNIX_TIMESTAMP();


মাইএসকিউএলটিতে উল্লেখিত মূল্যটি আপনার টেবিল কলামগুলি তৈরি করার সময় নিচের লাইন বরাবর কিছু ব্যবহার করতে পারে:

on update CURRENT_TIMESTAMP

এটি প্রতিটি সারিতে আপনি একটি সারি সংশোধন করতে সময় আপডেট করবে এবং কখনও কখনও শেষ সম্পাদনা তথ্য সংরক্ষণের জন্য খুব সহায়ক হবে। এই শুধুমাত্র টাইমস্ট্যাম্প সঙ্গে কাজ করে, না datetime তবে।


এই নিবন্ধ থেকে নেওয়া রেফারেন্স:

প্রধান পার্থক্য:

TIMESTAMP রেকর্ডগুলিতে পরিবর্তনগুলি ট্র্যাক করতে ব্যবহৃত হয়েছিল এবং রেকর্ড পরিবর্তিত হলে প্রতিবার আপডেট হয়। DATETIME নির্দিষ্ট এবং স্ট্যাটিক মান সংরক্ষণ করতে ব্যবহৃত যা রেকর্ডগুলির কোনও পরিবর্তন দ্বারা প্রভাবিত হয় না।

TIMESTAMP এছাড়াও বিভিন্ন টাইম জোনের সম্পর্কিত সেটিং দ্বারা প্রভাবিত। DATETIME ধ্রুবক।

TIMESTAMP অভ্যন্তরীণভাবে স্টোরেজের জন্য বর্তমান সময় অঞ্চলকে UTC এ রূপান্তরিত করে এবং পুনরুদ্ধারের সময় বর্তমান সময় অঞ্চলটিতে রূপান্তরিত হয়। DATETIME এটি করতে পারে না।

TIMESTAMP সমর্থিত পরিসীমা: '1970-01-01 00:00:01' UTC থেকে '2038-01-19 03:14:07' UTC DATETIME সমর্থিত পরিসীমা: '1000-01-01 00:00:00' থেকে '9999 -12-31 23:59:59 '


টাইমস্ট্যাম্প এবং ডেটটাইম এর মধ্যে আরেকটি পার্থক্য টিমস্ট্যাম্পে আপনি নুলের ডিফল্ট মানটি করতে পারবেন না।



আমি অযৌক্তিক ট্রিগারগুলির ব্যবহার না করেই বর্তমান সময় ভিত্তিক স্বয়ংক্রিয় আপডেট করার সময় TIMEAMAMP এর কার্যকারিতাগুলিতে অসীম ব্যবহারযোগ্যতা খুঁজে পেয়েছি। এটা ঠিক আমার যদিও, টাইমস্ট্যাম্প ইউটিসি এর মতোই বলেছে।

এটি বিভিন্ন টাইমজোন জুড়ে ট্র্যাক রাখতে পারে, তাই উদাহরণস্বরূপ আপনি যদি আপেক্ষিক সময় প্রদর্শন করতে চান তবে UTC সময়টি আপনি চান।


আমি একটি ইউনিক্স টাইমস্ট্যাম্প পছন্দ করি, কারণ আপনি সংখ্যার রূপান্তর করতে পারেন এবং কেবল নম্বরটি সম্পর্কে চিন্তা করতে পারেন। প্লাস আপনি যোগ / বিয়োগ এবং durations ইত্যাদি, ইত্যাদি। তারপর ফলাফল রূপান্তর তারিখ যাই হোক না কেন রূপান্তর। এই কোডটি একটি নথির সময় এবং বর্তমান সময় থেকে টাইমস্ট্যাম্পের মধ্যে কত মিনিট সময় পাস করে তা খুঁজে বের করে।

$date  = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now  - $result) / 60);
$min = round($unix_diff_min);

আমি টাইমস্ট্যাম্প ব্যবহার করে পছন্দ করি যাতে সবকিছু এক সাধারণ কাঁচা ফরম্যাটে রাখা যায় এবং পিএইচপি কোডে বা আপনার এসকিউএল ক্যোয়ারীতে ডাটা ফরম্যাট করে। এটি আপনার প্লেইনতে সহজে সবকিছু রাখতে প্লেইন সেকেন্ডে রয়েছে।


একটি TIMESTAMP4 বাইট প্রয়োজন, যখন একটি DATETIME8 বাইট প্রয়োজন।





sqldatatypes