sql >> Database teknologi >  >> RDS >> Mysql

Sådan indstilles lokaliteten for den aktuelle forbindelse i MySQL

Der er visse datofunktioner i MySQL, som returnerer et dag- eller månedsnavn. Jeg henviser især til DATE_FORMAT() , DAYNAME() , og MONTHNAME() funktioner. Disse kan returnere en værdi på f.eks. november , eller mandag , afhængigt af den anvendte forespørgsel. Men resultaterne kunne lige så nemt returneres på et andet sprog, hvis det kræves.

Sproget, som disse funktioner bruger til deres returværdi, er afledt af lc_time_names systemvariabel. Du kan se værdien af ​​denne variabel eller indstille dens SESSION værdi, så resultaterne af disse funktioner er på det ønskede sprog/lokalitet.

Lokale navne har sprog- og regionsundertags, der er angivet af Internet Assigned Numbers Authority (IANA). Eksempler inkluderer en_US for Engelsk – USA , en_NZ for Engelsk – New Zealand eller es_PA for Spansk – Panama osv. (for en liste over lokaliteter, der understøttes af MySQL, se den fulde liste over lokaliteter i MySQL).

I denne artikel viser jeg dig, hvordan du finder den aktuelle lokalitet for din forbindelse, ændrer den og derefter ser, hvordan den påvirker resultaterne af en forespørgsel. Jeg viser dig også en funktion, der er immun over for denne indstilling (men bare rolig, denne funktion giver dig mulighed for at angive lokaliteten).

Se den aktuelle landestandard

Lad os først se, hvad den aktuelle værdi er af lc_time_names systemvariabel.

VÆLG @@lc_time_names;

Resultat:

+----------------+| @@lc_time_names |+-----------------+| da_DK |+-----------------+

Så min nuværende lokalitet er en_US . Dette er faktisk standardværdien uanset dit systems landestandardindstilling (men dette kan ændres ved serverstart eller ved at indstille GLOBAL værdi).

Skift lokalitet

Lad os nu ændre lokalitet og se resultatet.

SET lc_time_names ='de_BE';SELECT @@lc_time_names;

Resultat:

+----------------+| @@lc_time_names |+-----------------+| de_BE |+-----------------+

I dette tilfælde ændrede jeg lokaliteten til de_BE , som er for Tysk – Belgien .

Eksempel på brug

Her er et eksempel, hvor jeg indstiller lokaliteten og derefter kører en forespørgsel, der returnerer et månedsnavn. Jeg indstiller derefter lokaliteten til en anden værdi og kører derefter den samme forespørgsel igen.

1. landestandard:Engelsk – USA

SET lc_time_names ='da_US';SELECT MONTHNAME('1999-10-03');

Resultat:

+------------------------+| MONTHNAME('1999-10-03') |+------------------------+| oktober |+-------------------------+

2. lokalitet:Spansk – Spanien

SET lc_time_names ='es_ES';SELECT MONTHNAME('1999-10-03');

Resultat:

+------------------------+| MONTHNAME('1999-10-03') |+------------------------+| oktober |+-------------------------+

FORMAT()-funktionen

Værdien af ​​lc_time_names påvirker ikke FORMAT() funktion, men denne funktion accepterer et tredje argument, der giver dig mulighed for at angive lokaliteten. Her er et eksempel på, hvad jeg mener.

SET lc_time_names ='de_DE';VÆLG FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');

Resultat:

+----------------+--------------------------------+| FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') |+-----------------+------------------------ ------+| 1.234 | 1.234 |+----------------+--------------------------------+ 

Så selvom jeg indstillede lc_time_names til de_DE først det første kald til FORMAT() ignorerede det. Da jeg kaldte funktionen anden gang, specificerede jeg eksplicit det samme sprog/lokalitet som det 3. argument, og det virkede.


  1. MySQL GROUP BY adfærd

  2. SqlDependency udløser ikke OnChange-hændelsen, når datasættet ændres

  3. Hvordan slutter man sig til det samme bord, to gange, i mysql?

  4. Vigtige sundhedstjek for dine MySQL-kilde-replikservere