- 1 1. Introduction
- 2 2. Comment récupérer l’heure actuelle dans MySQL
- 3 3. Comment formater l’heure actuelle dans MySQL
- 4 4. Calculs de date/heure en utilisant l’heure actuelle dans MySQL
- 5 5. Paramètres de fuseau horaire MySQL
- 6 6. Comment définir l’heure actuelle comme valeur par défaut dans MySQL
- 7 7. Erreurs MySQL courantes et solutions (FAQ)
- 8 8. Bonnes pratiques pour gérer l’heure actuelle dans MySQL
1. Introduction
Quand avez-vous besoin de gérer l’heure actuelle dans MySQL ?
Dans MySQL, la récupération de l’heure actuelle est requise dans de nombreux scénarios différents. Par exemple, les cas d’utilisation suivants sont courants :
- Insertion automatique d’un horodatage lors de l’enregistrement des données
- Par exemple, enregistrement de la date et de l’heure de création lors de la sauvegarde de données de commandes ou de journaux.
- Filtrage des données en fonction de l’heure actuelle
- Par exemple, récupération uniquement des données des 7 derniers jours ou recherche de enregistrements avec des dates futures.
- Formatage des dates et des heures pour l’affichage
- Formatage des valeurs de date et d’heure pour une meilleure lisibilité lors de la génération de rapports.
- Gestion de l’expiration des données en utilisant l’heure actuelle
- Par exemple, détermination si un coupon est encore valide en le comparant à l’heure actuelle.
Comme vous pouvez le voir, récupérer et manipuler correctement l’heure actuelle dans MySQL est une compétence importante en gestion de base de données.
Ce que vous apprendrez dans cet article
Cet article explique les sujets suivants en détail :
- Comment récupérer l’heure actuelle dans MySQL (
NOW(),CURRENT_TIMESTAMP, etc.) - Comment changer les formats de date et d’heure (en utilisant
DATE_FORMAT()) - Calculs de date et d’heure en utilisant l’heure actuelle (en utilisant
INTERVAL) - Comment changer le fuseau horaire (
SET SESSION time_zone) - Utilisation de l’heure actuelle comme valeur par défaut (
CURRENT_TIMESTAMP) - Erreurs courantes et comment les corriger (FAQ)
Des bases à l’utilisation avancée de la gestion de l’« heure actuelle » dans MySQL, ce guide fournit des exemples SQL pratiques. Assurez-vous de lire jusqu’à la fin.
2. Comment récupérer l’heure actuelle dans MySQL
Liste des fonctions pour récupérer l’heure actuelle dans MySQL
MySQL fournit plusieurs fonctions pour récupérer l’heure actuelle. Comprenez les différences et utilisez-les de manière appropriée.
| Function | Returns | Example |
|---|---|---|
NOW() | Current date and time (date + time) | SELECT NOW(); → 2025-02-11 16:00:00 |
CURRENT_TIMESTAMP | Same as NOW() (SQL standard) | SELECT CURRENT_TIMESTAMP; |
CURDATE() | Current date only | SELECT CURDATE(); → 2025-02-11 |
CURTIME() | Current time only | SELECT CURTIME(); → 16:00:00 |
Fonction NOW()
NOW() est la fonction la plus couramment utilisée dans MySQL pour récupérer l’heure actuelle.
Elle retourne à la fois la date et l’heure.
SELECT NOW();
Exemple de sortie :
2025-02-11 16:00:00
NOW()retourne l’heure système actuelle.- Comme elle est affectée par le fuseau horaire, l’heure affichée peut différer en fonction de votre environnement (expliqué en détail dans la section « Paramètres de fuseau horaire »).
Comment utiliser CURRENT_TIMESTAMP
CURRENT_TIMESTAMP se comporte presque de la même manière que NOW(). Elle respecte la norme SQL et peut également être utilisée dans d’autres bases de données.
SELECT CURRENT_TIMESTAMP;
Exemple de sortie :
2025-02-11 16:00:00
Obtenir uniquement la date avec CURDATE()
CURDATE() est utilisée lorsque vous souhaitez récupérer uniquement la date actuelle (année, mois, jour).
SELECT CURDATE();
Exemple de sortie :
2025-02-11
Obtenir uniquement l’heure avec CURTIME()
Si vous souhaitez récupérer uniquement l’heure actuelle (heure, minute, seconde), utilisez CURTIME().
SELECT CURTIME();
Exemple de sortie :
16:00:00
Quelle fonction devez-vous utiliser ?
| Purpose | Recommended Function |
|---|---|
| Retrieve both date and time | NOW() or CURRENT_TIMESTAMP |
| Retrieve date only | CURDATE() |
| Retrieve time only | CURTIME() |
3. Comment formater l’heure actuelle dans MySQL
Formatage personnalisé avec DATE_FORMAT()
Syntaxe de base de DATE_FORMAT()
Dans MySQL, vous pouvez utiliser la fonction DATE_FORMAT() pour changer librement le format des dates et des heures.
SELECT DATE_FORMAT(datetime_value, 'format_specifiers');
Exemple : Convertir NOW() au format YYYY/MM/DD HH:MM
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');
Sortie :
2025/02/11 16:45
Liste des spécificateurs de format courants
| Specifier | Meaning | Example (2025-02-11 16:45:30) |
|---|---|---|
%Y | 4-digit year | 2025 |
%m | 2-digit month (01-12) | 02 |
%d | 2-digit day (01-31) | 11 |
%H | Hour (00-23, 24-hour format) | 16 |
%i | Minutes (00-59) | 45 |
%s | Seconds (00-59) | 30 |
Extraire uniquement la partie heure avec TIME()
Si vous souhaitez extraire uniquement la partie heure de la datetime retournée par NOW(), utilisez la fonction TIME().
SELECT TIME(NOW());
Sortie :
16:45:30
Extraire des parties avec YEAR(), MONTH() et DAY()
Pour extraire uniquement des parties spécifiques, utilisez les fonctions suivantes.
| Function | Returns | SQL | Output Example (2025-02-11 16:45:30) |
|---|---|---|---|
YEAR() | Year | SELECT YEAR(NOW()); | 2025 |
MONTH() | Month | SELECT MONTH(NOW()); | 2 |
DAY() | Day | SELECT DAY(NOW()); | 11 |
Exemples pratiques de formatage
Le SQL suivant est utile pour essayer différents formats en pratique.
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. Calculs de date/heure en utilisant l’heure actuelle dans MySQL
Ajouter/Soustraire avec INTERVAL
Syntaxe de base
SELECT current_datetime + INTERVAL number unit;
SELECT current_datetime - INTERVAL number unit;
Ajouter du temps basé sur NOW()
Par exemple, pour récupérer la date/heure « une semaine plus tard » :
SELECT NOW() + INTERVAL 7 DAY;
Exemple de sortie :
2025-02-18 16:30:00
| Unit | Meaning | Example |
|---|---|---|
| SECOND | Seconds | NOW() + INTERVAL 10 SECOND |
| MINUTE | Minutes | NOW() + INTERVAL 5 MINUTE |
| HOUR | Hours | NOW() + INTERVAL 2 HOUR |
| DAY | Days | NOW() + INTERVAL 10 DAY |
| MONTH | Months | NOW() + INTERVAL 3 MONTH |
Calculer la différence entre deux dates avec DATEDIFF()
SELECT DATEDIFF(NOW(), '2025-01-01');
Exemple de sortie :
30
Filtrer par une plage de dates avec BETWEEN
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
5. Paramètres de fuseau horaire MySQL
Vérifier le fuseau horaire actuel
SHOW VARIABLES LIKE '%time_zone%';
Exemple de sortie :
+------------------+----------------+
| Variable_name | Value |
+------------------+----------------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+----------------+
Modifier le fuseau horaire par session
SET SESSION time_zone = 'Asia/Tokyo';
Modifier le fuseau horaire par défaut du serveur
Ajoutez ce qui suit au fichier de configuration (my.cnf) :
[mysqld]
default_time_zone = 'Asia/Tokyo'
Obtenir l’heure UTC avec UTC_TIMESTAMP
SELECT UTC_TIMESTAMP();
Convertir en heure locale avec CONVERT_TZ()
SELECT CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', 'Asia/Tokyo');
6. Comment définir l’heure actuelle comme valeur par défaut dans MySQL
Définir CURRENT_TIMESTAMP comme valeur par défaut
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Mises à jour automatiques avec 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
);
Différence entre DATETIME et TIMESTAMP
| Type | Affected by Time Zone | Can Set CURRENT_TIMESTAMP as Default |
|---|---|---|
TIMESTAMP | Yes | Yes |
DATETIME | No | No |
Pourquoi vous ne pouvez pas utiliser NOW() comme valeur par défaut et la solution
ERROR 1067 (42000): Invalid default value for 'created_at'
Solution :
CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();
7. Erreurs MySQL courantes et solutions (FAQ)
Impossible d’utiliser NOW() comme valeur par défaut
Exemple d’erreur
CREATE TABLE logs (
created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'
Solution
CREATE TABLE logs (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
L’heure CURRENT_TIMESTAMP est incorrecte
SHOW VARIABLES LIKE 'time_zone';
Solution
SET SESSION time_zone = 'Asia/Tokyo';
Le résultat de NOW() est décalé d’une heure
SHOW VARIABLES LIKE 'system_time_zone';
Solution
SET GLOBAL time_zone = 'Asia/Tokyo';
Le filtrage de plage BETWEEN ne fonctionne pas comme prévu
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-28';
Solution
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
8. Bonnes pratiques pour gérer l’heure actuelle dans MySQL
Quand utiliser NOW() vs CURRENT_TIMESTAMP
| Use Case | Recommended |
|---|---|
Retrieve the current time in a SELECT statement | NOW() |
Automatically set the current time during INSERT | CURRENT_TIMESTAMP |
Set as the default value of a TIMESTAMP column | CURRENT_TIMESTAMP |
Quand utiliser TIMESTAMP vs DATETIME
| Data Type | Affected by Time Zone | Storage Size |
|---|---|---|
TIMESTAMP | Yes | 4 bytes |
DATETIME | No | 8 bytes |
Stocker en UTC et convertir en heure locale
SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo');
Utilisez >= et < au lieu de BETWEEN
SELECT * FROM orders
WHERE created_at >= '2025-02-01 00:00:00'
AND created_at < '2025-03-01 00:00:00';
Standardiser l’utilisation de INTERVAL
SELECT NOW() + INTERVAL 1 DAY;
Nettoyer correctement les anciennes données
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR LIMIT 1000;


