Det finns vissa datumfunktioner i MySQL som returnerar ett dagnamn eller månadsnamn. Jag syftar särskilt på DATE_FORMAT()
, DAYNAME()
, och MONTHNAME()
funktioner. Dessa kan returnera ett värde på säg november , eller måndag , beroende på vilken fråga som används. Men resultaten kan lika gärna returneras på ett annat språk om det behövs.
Språket som dessa funktioner använder för deras returvärde härleds från lc_time_names
systemvariabel. Du kan se värdet på denna variabel eller ställa in dess SESSION
värde så att resultaten av dessa funktioner är på önskat språk/lokal.
Lokalnamn har språk- och regionundertaggar listade av Internet Assigned Numbers Authority (IANA). Exempel inkluderar en_US
för Engelska – USA , en_NZ
för Engelska – Nya Zeeland , eller es_PA
för spanska – Panama , etc (för en lista över språk som stöds av MySQL, se fullständig lista över språk i MySQL).
I den här artikeln kommer jag att visa dig hur du hittar den aktuella lokalen för din anslutning, ändrar den och sedan ser hur den påverkar resultatet av en fråga. Jag visar dig också en funktion som är immun mot den här inställningen (men oroa dig inte, den här funktionen låter dig ange lokalen).
Visa det aktuella språket
Låt oss först se vad det aktuella värdet är för lc_time_names
systemvariabel.
VÄLJ @@lc_time_names;
Resultat:
+----------------+| @@lc_time_names |+-----------------+| sv_SE |+-----------------+
Så mitt nuvarande språk är en_US
. Detta är faktiskt standardvärdet oberoende av ditt systems lokalinställning (men detta kan ändras vid serverstart eller genom att ställa in GLOBAL
värde).
Ändra språk
Låt oss nu ändra språket och se resultatet.
SET lc_time_names ='de_BE';SELECT @@lc_time_names;
Resultat:
+----------------+| @@lc_time_names |+-----------------+| de_BE |+-----------------+
I det här fallet ändrade jag språket till de_BE
, som är för Tyska – Belgien .
Exempel på användning
Här är ett exempel där jag ställer in språket och sedan kör en fråga som returnerar ett månadsnamn. Jag ställer sedan in lokalen till ett annat värde och kör sedan samma fråga igen.
Första språk:Engelska – USA
SET lc_time_names ='en_US';SELECT MONTHNAME('1999-10-03');
Resultat:
+------------------------+| MONTHNAME('1999-10-03') |+-------------------------+| Oktober |+-------------------------+
2:a språk:Spanska – Spanien
SET lc_time_names ='es_ES';SELECT MONTHNAME('1999-10-03');
Resultat:
+------------------------+| MONTHNAME('1999-10-03') |+-------------------------+| octubre |+-------------------------+
FORMAT()-funktionen
Värdet på lc_time_names
påverkar inte FORMAT()
funktion, men den här funktionen accepterar ett tredje argument som låter dig ange lokalen. Här är ett exempel på vad jag menar.
SET lc_time_names ='de_DE';VÄLJ FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
Resultat:
+----------------+--------------------------------+| FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') |+----------------+-------------------------- ------+| 1 234 | 1,234 |+----------------+--------------------------------+Så även om jag ställer in
lc_time_names
tillde_DE
först det första anropet tillFORMAT()
ignorerade det. När jag anropade funktionen andra gången angav jag uttryckligen samma språk/lokal som det tredje argumentet, och det fungerade.