sql >> Databasteknik >  >> RDS >> Mysql

Hur man ställer in lokalen för den aktuella anslutningen i MySQL

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 till de_DE först det första anropet till FORMAT() ignorerade det. När jag anropade funktionen andra gången angav jag uttryckligen samma språk/lokal som det tredje argumentet, och det fungerade.


  1. Hur återställer jag PostgreSQL-dumpfilen till Postgres-databaser?

  2. Hur anger du ett annat portnummer i SQL Management Studio?

  3. Hur TRIM() fungerar i MariaDB

  4. Hur inaktiverar man trigger i Oracle SQL Developer?