كيف يمكنني جعل وظائف MySQL الآن () و Curdate () استخدام UTC؟

StackOverflow https://stackoverflow.com/questions/947299

  •  09-09-2019
  •  | 
  •  

سؤال

أريد أن أجعلها مكالمات حتى الآن () وروع () في استفسارات MySQL إرجاع التاريخ في UTC. كيف أجعل هذا يحدث دون المرور وتغيير جميع الاستفسارات التي تستخدم هذه الوظائف؟

هل كانت مفيدة؟

المحلول

وأخيرا وجدت ما كنت أبحث عنه ...

في my.cnf،

[mysqld_safe]
timezone = UTC

كنت أضع هذا الخيار تحت [MySQLD]، وكان MySQL فشل في البدء.

استدعاء "ضبط TIME_ZONE = '+ 0:00'؛" في كل عبء الصفحات، سيعمل أيضا، لكنني لا أحب فكرة استدعاء هذا الاستعلام على كل عبء صفحة واحدة.

نصائح أخرى

اضبط ساعة الخادم الخاصة بك على UTC. لا حقا.

إذا كنت تستطيع أن تفعل ذلك، ففعل ذلك.

واحدة من أكبر الصداع هي وظائف "كرون" وما إلى ذلك، والتي تعمل في المنطقة الزمنية المحلية، وهذا يعني أن بعض وظائف Cron ستفقد مرة واحدة في السنة، وجميع الباقي في وقت مختلف في وقت واحد بتوقيت جرينتش لمدة نصف السنة (أنا أفترض أنت في منطقة زمنية تحتوي على توقيت النهار هنا).

MySQL لديها دعم المنطقة الزمنية، لكنها مجنونة ومرسومة. لا تستخدمه إذا لم يكن لديك. فقط اضبط ساعة الخادم الخاصة بك على UTC والوقت سيبدأ في العمل كيف ينبغي.

أعلم أن تغيير ساعة الخادم هو تغيير كبير لأي نظام مدار، وقد يكون لديك عدد كبير من الخوادم والخدمات التي يمكن أن تتأثر، ولكن من فضلك، حاول القيام بذلك على أي حال. قد يكون عمل ضمان الجودة كبيرا، ولكن حاول.

FOTO /ETC/MYSQL/MY.CNF ملف وإضافة هذا الخط أدناه تحت [MySQLD] القسم

افتراضي الزمنية = '+00: 00'

ثم أعد تشغيل MySQL الخاص بك. الآن حدد القامة ()؛ يظهر وقت GMT.

إذا قمت بتغيير TIMEZONE على خوادم الإنتاج الجارية أو تحديث إعداد تكوين رئيسي وإعادة تشغيل MySQL غير واقعي و / أو مبالك، فجرب هذا:

CONVERT_TZ(NOW(), 'US/Pacific', 'UTC')

أين US/Pacific هو timezone الخاص بك NOW() المكالمة هي إرجاع الوقت في.

الطريقة المناسبة للقيام بذلك هي تغيير المنطقة الزمنية للخادم إلى UTC، تماما كما قال ماركر.

ومع ذلك، من الممكن أيضا استخدامها ضبط TIME_ZONE. لتغيير المنطقة الزمنية لدورةك الحالية.

من الدليل:

يؤثر إعداد المنطقة الزمنية الحالية على عرض وتخزين القيم الزمنية الحساسة للمنطقة. يتضمن ذلك القيم المعروضة بواسطة وظائف مثل الآن () أو القصر ()

UTC_TIMESTAMP()

إرجاع تاريخ ووقت UTC الحالي كقيمة في "yyyy-mm-dd hh: mm: ss" أو yyyymmddhmmss.uuuuu، اعتمادا على ما إذا كانت الدالة تستخدم في سلسلة أو سياق رقمي.

UTC_DATE()

إرجاع تاريخ UTC الحالي كقيمة في تنسيق "Yyyy-DD" أو YYYYMMDD، اعتمادا على ما إذا كانت الوظيفة تستخدم في سلسلة أو سياق رقمي.

UTC_TIME()

إرجاع وقت UTC الحالي كقيمة في تنسيق "HH: MM: SS" أو HHMMSS.uuuuuu، اعتمادا على ما إذا كانت الوظيفة تستخدم في String أو سياق رقمي.

مرجع MySQL: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_utc-timestamp.

ستحتاج إلى استخدام عبارة Set Timestamp لتنسيق نتائج DateTime بالتنسيق المطلوب. هذا يعني تغيير كل هذه الاستفسارات. Sysdate () لن يطيع ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top