Il existe certaines fonctions de date dans MySQL qui renvoient un nom de jour ou un nom de mois. En particulier, je fais référence au DATE_FORMAT()
, DAYNAME()
, et MONTHNAME()
les fonctions. Celles-ci peuvent renvoyer une valeur de, par exemple, Novembre , ou lundi , selon la requête utilisée. Mais les résultats pourraient tout aussi bien être renvoyés dans une autre langue si nécessaire.
Le langage utilisé par ces fonctions pour leur valeur de retour est dérivé du lc_time_names
variable système. Vous pouvez afficher la valeur de cette variable ou définir sa SESSION
pour que les résultats de ces fonctions soient dans la langue/locale souhaitée.
Les noms de paramètres régionaux ont des sous-étiquettes de langue et de région répertoriées par l'IANA (Internet Assigned Numbers Authority). Les exemples incluent en_US
pour Anglais – États-Unis , en_NZ
pour anglais – néo-zélandais , ou es_PA
pour l'espagnol – Panama , etc. (pour obtenir une liste des paramètres régionaux pris en charge par MySQL, consultez Liste complète des paramètres régionaux dans MySQL).
Dans cet article, je vais vous montrer comment trouver les paramètres régionaux actuels de votre connexion, les modifier, puis voir comment cela affecte les résultats d'une requête. Je vous montre également une fonction qui est immunisée contre ce paramètre (mais ne vous inquiétez pas, cette fonction vous permet de spécifier les paramètres régionaux).
Afficher les paramètres régionaux actuels
Voyons d'abord quelle est la valeur actuelle de lc_time_names
variable système.
SÉLECTIONNER @@lc_time_names ;
Résultat :
+-----------------+| @@lc_time_names |+-----------------+| fr_FR |+-----------------+
Donc mes paramètres régionaux actuels sont en_US
. Il s'agit en fait de la valeur par défaut, quel que soit le paramètre régional de votre système (mais cela peut être modifié au démarrage du serveur ou en définissant le GLOBAL
valeur).
Modifier les paramètres régionaux
Modifions maintenant les paramètres régionaux et visualisons le résultat.
SET lc_time_names ='de_BE';SELECT @@lc_time_names;
Résultat :
+-----------------+| @@lc_time_names |+-----------------+| de_BE |+-----------------+
Dans ce cas, j'ai changé les paramètres régionaux en de_BE
, qui est pour Allemand – Belgique .
Exemple d'utilisation
Voici un exemple où je définis les paramètres régionaux, puis exécute une requête qui renvoie un nom de mois. Je définis ensuite les paramètres régionaux sur une valeur différente, puis exécute à nouveau la même requête.
1ère langue :anglais – États-Unis
SET lc_time_names ='en_US';SELECT MONTHNAME('1999-10-03');
Résultat :
+-------------------------+| NOM DU MOIS('1999-10-03') |+------------------------------+| Octobre |+-------------------------+
2e langue :espagnol – Espagne
SET lc_time_names ='es_ES';SELECT MONTHNAME('1999-10-03');
Résultat :
+-------------------------+| NOM DU MOIS('1999-10-03') |+------------------------------+| octobre |+-------------------------+
La fonction FORMAT()
La valeur de lc_time_names
n'affecte pas le FORMAT()
fonction, mais cette fonction accepte un 3ème argument qui vous permet de spécifier la locale. Voici un exemple de ce que je veux dire.
SET lc_time_names ='de_DE';SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
Résultat :
+-----------------+--------------------------+| FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') |+-----------------+-------------------- ------+| 1 234 | 1.234 |+-----------------+--------------------------+Donc, même si j'ai défini
lc_time_names
àde_DE
d'abord, l'appel initial àFORMAT()
ignoré cela. Lorsque j'ai appelé la fonction la deuxième fois, j'ai explicitement spécifié cette même langue/locale comme 3ème argument, et cela a fonctionné.