মাইএসকিউএল ইউটিসি সময়কে ডিফল্ট টাইমস্ট্যাম্প হিসাবে সেট করে


35

আমি কীভাবে এমন টাইমস্ট্যাম্প কলাম সেট করব যেটির ডিফল্ট মান বর্তমান ইউটিসি সময়?

মাইএসকিউএল UTC_TIMESTAMP()ইউটিসি টাইমস্ট্যাম্পের জন্য ফাংশন ব্যবহার করে:

mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP()     |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)

সুতরাং আমি চেষ্টা করেছি:

CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...

এবং অন্যান্য বৈচিত্রগুলি, পছন্দ মতো UTC_TIMESTAMP()তবে সাফল্য ছাড়াই।


আপনি চেষ্টা করেছেন CURRENT_TIMESTAMP?
ypercubeᵀᴹ

1
এটি কাজ করে তবে এটি ইউটিসির পরিবর্তে স্থানীয় সময় অঞ্চল মান সঞ্চয় করে না।
আদম মতান

আপনি ঠিক কি করতে চান? টেবিল কলামে ইউটিসি টাইমস্ট্যাম্প স্টোর করবেন? অথবা অন্য কিছু?
ypercubeᵀᴹ

8
তারিখ থেকে , DATETIME, এবং TIMESTAMP প্রকারগুলি :MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval.
ypercubeᵀᴹ

3
সচেতন থাকুন যে ইউটিসি হিসাবে স্টোরেজটি কেবলমাত্র টাইমস্ট্যাম্প ডেটাটাইপের ক্ষেত্রে প্রযোজ্য, তারিখ এবং তারিখের ক্ষেত্রে নয় (যদিও আপনি তাদের ডিফল্ট সেট করতে পারেন CURRENT_TIMESTAMP)। একই ডকুমেন্টেশন পৃষ্ঠাটিতে থেকে: (This does not occur for other types such as DATETIME.)
অরোনভানআম্মার্স

উত্তর:


49

CURRENT_TIMESTAMPইউটিসি হিসাবে সংরক্ষিত তবে বর্তমান টাইমজোন হিসাবে পুনরুদ্ধার করা @ ইয়পারকিউবের মন্তব্যের পাশাপাশি যেতে , আপনি পুনরুদ্ধারের জন্য --default_time_zone বিকল্পের সাহায্যে আপনার সার্ভারের টাইমজোন সেটিংসকে প্রভাবিত করতে পারেন । এটি আপনার পুনরুদ্ধার সর্বদা ইউটিসিতে থাকতে দেয়।

ডিফল্টরূপে, বিকল্পটি 'SYSTEM' যা আপনার সিস্টেমের সময় অঞ্চলটি কীভাবে সেট করা হয় (যা ইউটিসি হতে পারে বা নাও হতে পারে!):

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2012-09-25 16:28:45 |
+---------------------+
1 row in set (0.00 sec)

আপনি এটি গতিশীল সেট করতে পারেন:

mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | +00:00              |
+--------------------+---------------------+
1 row in set (0.00 sec)

বা স্থায়ীভাবে আপনার my.cnf এ:

[mysqld]
**other variables**
default_time_zone='+00:00'

আপনার সার্ভারটি পুনরায় চালু করুন, এবং আপনি পরিবর্তনটি দেখতে পাবেন:

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00             | +00:00              |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set (0.01 sec)

2
খুব সহায়ক পোস্ট !!
om39a

default_time_zoneনির্দিষ্ট টেবিল বা ডাটাবেসের জন্য নির্দিষ্ট করা কি সম্ভব ? ধন্যবাদ।
ডাব্লুএম

2
নির্দিষ্ট প্রশ্নের জন্য ডিফল্ট_টাইম_জোন নির্দিষ্ট করা সম্ভব?
এমসিএমিলাব

@ এমসিএমিল্যাব আপনি ক্যোরি চালানোর আগে সেশন টাইমজোনটি সেট করতে পারেন, তারপরে আরও প্রশ্নগুলি চালানোর আগে গ্লোবাল টাইমজোনটিতে পুনরায় সেট করুন (বা পুনরায় সংযুক্ত করুন)।
ডেরেক

এমসিএমিল্যাব অনুসরণ করছেন - বা কোনও অপারেটরের সাথে কলামটি জিজ্ঞাসা করতে যা অন্তর্নিহিত ইউটিসি মানটি দেখায় (যেহেতু রূপান্তর 1-টু নয়)?
মার্ক এল।

4

UTC_TIMESTAMPস্বয়ংক্রিয় বৈশিষ্ট্যগুলি নির্দিষ্ট করতে আপনি ডিফল্ট হিসাবে নির্দিষ্ট করতে পারবেন না , আপনার কেবল ডিফল্ট CURRENT_TIMESTAMPএবং ON UPDATE CURRENT_TIMESTAMPধারাগুলি ব্যবহার করা উচিত ।

এছাড়াও আপনি UTC_TIMESTAMPকোনও টেবিলের জন্য এই জাতীয় মান লিখতে পারেন :

CREATE TABLE `test` (
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

INCERT ক্যোয়ারী UTC_TImeSTAMP sertোকানো এর মতো হবে:

insert into `test` (`ts`) 
values
  (utc_timestamp()) ;

"স্বয়ংক্রিয় বৈশিষ্ট্য নির্দিষ্ট করার জন্য আপনি ইউটিসিটাইমসটাইমপিকে ডিফল্ট হিসাবে নির্দিষ্ট করতে পারবেন না" এর জন্য ধন্যবাদ
বার্বারোস আল্প

4

আমার সমাধানটি একটি ট্রিগার সহ:

DELIMITER //
CREATE TRIGGER `update_to_utc` BEFORE INSERT ON `my_table` FOR EACH ROW BEGIN
set new.my_field=utc_timestamp();
END//
DELIMITER ;

তারপরে প্রতিটি নতুন rowোকানো সারিতে ইউটিসিতে টাইমস্ট্যাম্প থাকবে।


1

মারিয়্যাডবি-র জন্য কেবল বিশ্বব্যাপী my.cnf সমাধানগুলি কাজ করেছিল

মারিয়াডব 10.2 এর জন্য, এই পোস্টে @ ডেরাক ডোনাইয়ের স্থায়ী সমাধান।

[mysqld]
**other variables**
default_time_zone='+00:00'

মারিয়্যাডবি 10.0 এর জন্য (আমার 10.0.32 ছিল), https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-function-use-utc দেখুন

[mysqld_safe]
**other variables**
timezone = UTC

উভয় সংজ্ঞা মারিয়্যাডবি 10.2 এর মাই সিএনএফ-তে সহাবস্থান থাকতে পারে, তবে আমার আর মারিয়্যাডবি 10.0 নেই।

আশা করি এটা তোমাকে সাহায্য করবে.

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