দুই টাইপই YYYY-MM-DD HH:MM:SS ফরম্যাটে ডেটা স্টোর করে এবং ডেটা+টাইম উভয়ই ধারণ করে। তবুও গুরুত্বপূর্ণ পার্থক্য রয়েছে:
- রেঞ্জ (Range):
- DATETIME:
1000-01-01 00:00:00থেকে9999-12-31 23:59:59 - TIMESTAMP:
1970-01-01 00:00:01থেকে2038-01-19 08:44:07
- DATETIME:
- স্টোরেজ সাইজ (MySQL 5.6.4+):
- DATETIME: ৫ বাইট + ৩ বাইট (ফ্র্যাকশনাল সেকেন্ডের জন্য)
- TIMESTAMP: ৪ বাইট + ৩ বাইট (ফ্র্যাকশনাল সেকেন্ডের জন্য)
- টাইমজোন কনভারশন: TIMESTAMP মান বর্তমান টাইমজোন থেকে UTC-তে কনভার্ট হয় (সেভ করার সময়) এবং UTC থেকে বর্তমান টাইমজোনে (রিড করার সময়)। DATETIME-এ কোনো কনভারশন হয় না।
- ইনডেক্সিং: TIMESTAMP-এ ইনডেক্স করা যায়, DATETIME-এ সরাসরি ইনডেক্স করা যায় না (পুরানো ভার্সনে)।
- ক্যাশিং: TIMESTAMP دار কোয়েরি ক্যাশ হয়, DATETIME দার ক্যাশ হয় না।
উদাহরণ
mysql> CREATE TABLE test_datetime(time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); mysql> INSERT INTO test_datetime (time) VALUES (CURRENT_TIMESTAMP); mysql> SELECT * FROM test_datetime; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:03 | +---------------------+ mysql> CREATE TABLE test_timestamp(time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); mysql> INSERT INTO test_timestamp (time) VALUES (CURRENT_TIMESTAMP); mysql> SELECT * FROM test_timestamp; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:50 | +---------------------+
টাইমজোন পরিবর্তন (SET @@session.time_zone = '-5:00') করলে:
test_timestamp-এ সময় পরিবর্তিত হয় (UTC কনভারশন)।test_datetime-এ সময় অপরিবর্তিত থাকে।