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
tilde_DE
først det første kald tilFORMAT()
ignorerede det. Da jeg kaldte funktionen anden gang, specificerede jeg eksplicit det samme sprog/lokalitet som det 3. argument, og det virkede.