Mwongozo wa Muda wa Sasa wa MySQL: NOW(), CURRENT_TIMESTAMP, DATE_FORMAT, Mipangilio ya Ukanda wa Saa & Mazingira Bora

目次

1. Utangulizi

Unapohitaji Kushughulikia Wakati Wa Sasa katika MySQL?

Katika MySQL, kupata wakati wa sasa hutajika katika hali nyingi tofauti. Kwa mfano, matumizi yafuatayo ni ya kawaida:

  • Kuingiza moja kwa moja muhuri wa wakati wakati wa kusajili data
  • Kwa mfano, kurekodi tarehe na wakati wa kuunda wakati wa kuhifadhi data ya agizo au data ya kumbukumbu.
  • ** Kuchuja data kulingana na wakati wa sasa**
  • Kwa mfano, kupata data tu kutoka siku 7 zilizopita au kutafuta rekodi zenye tarehe za baadaye.
  • ** Kupanga tarehe na nyakati kwa ajili ya kuonyesha**
  • Kupanga thamani za tarehe na wakati kwa kusomwa vizuri wakati wa kuzalisha ripoti.
  • Kudhibiti mwisha wa data kwa kutumia wakati wa sasa
  • Kwa mfano, kuamua ikiwa kodi bado ni halali kwa kuilinganisha na wakati wa sasa.

Kama unavyoona, kupata na kudhibiti wakati wa sasa kwa usahihi katika MySQL ni ustadi muhimu katika usimamizi wa hifadhidata.

Utakachojifunza katika Hii Makala

Hii makala inaeleza mada zifuatazo kwa undani:

  • Jinsi ya kupata wakati wa sasa katika MySQL (NOW(), CURRENT_TIMESTAMP, n.k.)
  • Jinsi ya kubadilisha muundo wa tarehe na wakati (kutumia DATE_FORMAT())
  • Hesabu za tarehe na wakati kutumia wakati wa sasa (kutumia INTERVAL)
  • Jinsi ya kubadilisha eneo la wakati (SET SESSION time_zone)
  • Kutumia wakati wa sasa kama thamani ya chaguo-msingi (CURRENT_TIMESTAMP)
  • Makosa ya kawaida na jinsi ya kuyatenganisha (FAQ)

Kutoka misingi hadi matumizi ya hali ya juu ya kushughulikia “wakati wa sasa” katika MySQL, mwongozo huu hutoa mifano ya vitendo vya SQL. Hakikisha kusoma hadi mwisho.

2. Jinsi ya Kupata Wakati Wa Sasa katika MySQL

Orodha ya Vifaa vya Kupata Wakati Wa Sasa katika MySQL

MySQL hutoa vifaa kadhaa vya kupata wakati wa sasa. Elewa tofauti na utumie kwa usahihi.

FunctionReturnsExample
NOW()Current date and time (date + time)SELECT NOW();2025-02-11 16:00:00
CURRENT_TIMESTAMPSame as NOW() (SQL standard)SELECT CURRENT_TIMESTAMP;
CURDATE()Current date onlySELECT CURDATE();2025-02-11
CURTIME()Current time onlySELECT CURTIME();16:00:00

Kifaa cha NOW()

NOW() ni kifaa kinachotumiwa sana katika MySQL kupata wakati wa sasa.
Inarudisha tarehe na wakati wote.

SELECT NOW();

Mfano wa pato:

2025-02-11 16:00:00
  • NOW() inarudisha wakati wa sasa wa mfumo.
  • Kwa sababu inaathiriwa na eneo la wakati, wakati unaoonyeshwa unaweza kutofautiana kulingana na mazingira yako (imeelezwa kwa undani katika sehemu ya “Mipangilio ya Eneo la Wakati”).

Jinsi ya Kutumia CURRENT_TIMESTAMP

CURRENT_TIMESTAMP inafanya kazi karibu sawa na NOW(). Inazingatia kiwango cha SQL na inaweza kutumiwa pia katika hifadhidata zingine.

SELECT CURRENT_TIMESTAMP;

Mfano wa pato:

2025-02-11 16:00:00

Pata Tarehe Pekee na CURDATE()

CURDATE() hutumiwa wakati unapotaka kupata tarehe ya sasa pekee (mwaka, mwezi, siku).

SELECT CURDATE();

Mfano wa pato:

2025-02-11

Pata Wakati Pekee na CURTIME()

Ikiwa unataka kupata wakati wa sasa pekee (saa, dakika, sekunde), tumia CURTIME().

SELECT CURTIME();

Mfano wa pato:

16:00:00

Ni Kifaa Gani Cha Kutumia?

PurposeRecommended Function
Retrieve both date and timeNOW() or CURRENT_TIMESTAMP
Retrieve date onlyCURDATE()
Retrieve time onlyCURTIME()

3. Jinsi ya Kupanga Wakati Wa Sasa katika MySQL

Kupanga Kibinafsi na DATE_FORMAT()

Sintaksisi ya Msingi ya DATE_FORMAT()

Katika MySQL, unaweza kutumia kifaa cha DATE_FORMAT() ili kubadilisha muundo wa tarehe na wakati kwa uhuru.

SELECT DATE_FORMAT(datetime_value, 'format_specifiers');

Mfano: Badilisha NOW() kuwa muundo wa YYYY/MM/DD HH:MM

SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');

Pato:

2025/02/11 16:45

Orodha ya Vifaa vya Muundo vya Kawaida

SpecifierMeaningExample (2025-02-11 16:45:30)
%Y4-digit year2025
%m2-digit month (01-12)02
%d2-digit day (01-31)11
%HHour (00-23, 24-hour format)16
%iMinutes (00-59)45
%sSeconds (00-59)30

Chukua Sehemu ya Wakati Pekee na TIME()

Ikiwa unataka kuchukua sehemu ya wakati pekee kutoka kwa datetime inayorudiwa na NOW(), tumia kifaa cha TIME().

SELECT TIME(NOW());

Pato:

16:45:30

Chukua Sehemu na YEAR(), MONTH(), na DAY()

Ili kuchukua sehemu maalum pekee, tumia vifaa vifuatavyo.

FunctionReturnsSQLOutput Example (2025-02-11 16:45:30)
YEAR()YearSELECT YEAR(NOW());2025
MONTH()MonthSELECT MONTH(NOW());2
DAY()DaySELECT DAY(NOW());11

Mifano ya Vitendo ya Kupanga

The following SQL is useful for trying various formats in practice.

SELECT 
    NOW() AS 'Original datetime',
    DATE_FORMAT(NOW(), '%Y/%m/%d') AS 'YYYY/MM/DD format',
    DATE_FORMAT(NOW(), '%H:%i:%s') AS 'HH:MM:SS',
    TIME(NOW()) AS 'Time only',
    YEAR(NOW()) AS 'Year',
    MONTH(NOW()) AS 'Month',
    DAY(NOW()) AS 'Day';

4. Mahesabu ya Tarehe/Muda kwa Kutumia Muda wa Sasa katika MySQL

Ongeza/Punguza kwa INTERVAL

Sarufi ya Msingi

SELECT current_datetime + INTERVAL number unit;
SELECT current_datetime - INTERVAL number unit;

Ongeza Muda Kutokana na NOW()

Kwa mfano, ili kupata tarehe na muda “wiki moja baadaye”:

SELECT NOW() + INTERVAL 7 DAY;

Mfano wa Matokeo:

2025-02-18 16:30:00
UnitMeaningExample
SECONDSecondsNOW() + INTERVAL 10 SECOND
MINUTEMinutesNOW() + INTERVAL 5 MINUTE
HOURHoursNOW() + INTERVAL 2 HOUR
DAYDaysNOW() + INTERVAL 10 DAY
MONTHMonthsNOW() + INTERVAL 3 MONTH

Hesabu Tofauti Kati ya Tarehe Mbili kwa DATEDIFF()

SELECT DATEDIFF(NOW(), '2025-01-01');

Mfano wa Matokeo:

30

Chuja kwa Mzigo wa Tarehe kwa BETWEEN

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';

5. Mipangilio ya Ukanda wa Muda wa MySQL

Angalia Ukanda wa Muda wa Sasa

SHOW VARIABLES LIKE '%time_zone%';

Mfano wa Matokeo:

+------------------+----------------+
| Variable_name    | Value          |
+------------------+----------------+
| system_time_zone | UTC            |
| time_zone        | SYSTEM         |
+------------------+----------------+

Badilisha Ukanda wa Muda kwa Kikao

SET SESSION time_zone = 'Asia/Tokyo';

Badilisha Ukanda wa Muda Chaguo-msingi wa Seva

Ongeza yafuatayo kwenye faili ya usanidi (my.cnf):

[mysqld]
default_time_zone = 'Asia/Tokyo'

Pata Muda wa UTC kwa UTC_TIMESTAMP

SELECT UTC_TIMESTAMP();

Badilisha kwa Muda wa Mahali kwa CONVERT_TZ()

SELECT CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', 'Asia/Tokyo');

6. Jinsi ya Kuweka Muda wa Sasa kama Thamani Chaguo-msingi katika MySQL

Weka CURRENT_TIMESTAMP kama Thamani Chaguo-msingi

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Usasishaji wa Kiotomatiki kwa ON UPDATE CURRENT_TIMESTAMP

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Tofauti Kati ya DATETIME na TIMESTAMP

TypeAffected by Time ZoneCan Set CURRENT_TIMESTAMP as Default
TIMESTAMPYesYes
DATETIMENoNo

Kwa Nini Huwezi Kutumia NOW() kama Thamani Chaguo-msingi na Suluhisho

ERROR 1067 (42000): Invalid default value for 'created_at'

Suluhisho:

CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();

7. Makosa ya Kawaida ya MySQL na Suluhisho (FAQ)

Haiwezi Kutumia NOW() kama Thamani Chaguo-msingi

Mfano wa Hitilafu

CREATE TABLE logs (
    created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'

Suluhisho

CREATE TABLE logs (
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Muda wa CURRENT_TIMESTAMP Si Sahihi

SHOW VARIABLES LIKE 'time_zone';

Suluhisho

SET SESSION time_zone = 'Asia/Tokyo';

Matokeo ya NOW() Yamepungua kwa Saa Moja

SHOW VARIABLES LIKE 'system_time_zone';

Suluhisho

SET GLOBAL time_zone = 'Asia/Tokyo';

Uchinujaji wa Mzigo wa BETWEEN Haufanyi Kazi kama Ilivyotarajiwa

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-28';

Suluhisho

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';

8. Mazoezi Bora ya Kushughulikia Muda wa Sasa katika MySQL

Lini Kutumia NOW() vs CURRENT_TIMESTAMP

Use CaseRecommended
Retrieve the current time in a SELECT statementNOW()
Automatically set the current time during INSERTCURRENT_TIMESTAMP
Set as the default value of a TIMESTAMP columnCURRENT_TIMESTAMP

Lini Kutumia TIMESTAMP vs DATETIME

Data TypeAffected by Time ZoneStorage Size
TIMESTAMPYes4 bytes
DATETIMENo8 bytes

Hifadhi katika UTC na Badilisha kwa Muda wa Mahali

SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo');

Tumia >= na < Badala ya BETWEEN

SELECT * FROM orders
WHERE created_at >= '2025-02-01 00:00:00' 
AND created_at < '2025-03-01 00:00:00';

Sanifisha Matumizi ya INTERVAL

SELECT NOW() + INTERVAL 1 DAY;

Safisha Data ya Zamani Kwa Usahihi

DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR LIMIT 1000;