Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment définir les paramètres régionaux pour la connexion actuelle dans MySQL

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é.