Er zijn bepaalde datumfuncties in MySQL die een dagnaam of maandnaam retourneren. Ik verwijs in het bijzonder naar de DATE_FORMAT()
, DAYNAME()
, en MONTHNAME()
functies. Deze kunnen een waarde retourneren van bijvoorbeeld november , of maandag , afhankelijk van de query die wordt gebruikt. Maar de resultaten kunnen desgewenst net zo gemakkelijk in een andere taal worden geretourneerd.
De taal die deze functies gebruiken voor hun retourwaarde is afgeleid van de lc_time_names
systeem variabele. U kunt de waarde van deze variabele bekijken of de SESSION
ervan instellen waarde zodat de resultaten van deze functies in de gewenste taal/landinstelling zijn.
Landinstellingen hebben subtags voor taal en regio die worden vermeld door de Internet Assigned Numbers Authority (IANA). Voorbeelden zijn en_US
voor Engels – Verenigde Staten , en_NZ
voor Engels – Nieuw-Zeeland , of es_PA
voor Spaans – Panama , enz. (voor een lijst met door MySQL ondersteunde landinstellingen, zie Volledige lijst met landinstellingen in MySQL).
In dit artikel laat ik u zien hoe u de huidige landinstelling voor uw verbinding kunt vinden, deze kunt wijzigen en vervolgens kunt zien hoe dit de resultaten van een zoekopdracht beïnvloedt. Ik laat je ook een functie zien die immuun is voor deze instelling (maar maak je geen zorgen, met deze functie kun je de landinstelling specificeren).
Bekijk de huidige landinstelling
Laten we eerst eens kijken wat de huidige waarde is van de lc_time_names
systeemvariabele.
SELECT @@lc_time_names;
Resultaat:
+-----------------+ | @@lc_time_names | +-----------------+ | en_US | +-----------------+
Dus mijn huidige landinstelling is en_US
. Dit is eigenlijk de standaardwaarde, ongeacht de landinstelling van uw systeem (maar dit kan worden gewijzigd bij het opstarten van de server of door het instellen van de GLOBAL
waarde).
Wijzig de landinstelling
Laten we nu de landinstelling wijzigen en het resultaat bekijken.
SET lc_time_names = 'de_BE'; SELECT @@lc_time_names;
Resultaat:
+-----------------+ | @@lc_time_names | +-----------------+ | de_BE | +-----------------+
In dit geval heb ik de landinstelling gewijzigd in de_BE
, dat is voor Duits – België .
Gebruiksvoorbeeld
Hier is een voorbeeld waarbij ik de landinstelling instel en vervolgens een query uitvoer die een maandnaam retourneert. Vervolgens stel ik de landinstelling in op een andere waarde en voer ik dezelfde query opnieuw uit.
Eerste landinstelling:Engels – Verenigde Staten
SET lc_time_names = 'en_US'; SELECT MONTHNAME('1999-10-03');
Resultaat:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | October | +-------------------------+
2nd Locale:Spaans – Spanje
SET lc_time_names = 'es_ES'; SELECT MONTHNAME('1999-10-03');
Resultaat:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | octubre | +-------------------------+
De FORMAT()-functie
De waarde van lc_time_names
heeft geen invloed op de FORMAT()
functie, maar deze functie accepteert een derde argument waarmee u de landinstelling kunt specificeren. Hier is een voorbeeld van wat ik bedoel.
SET lc_time_names = 'de_DE'; SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
Resultaat:
+-----------------+--------------------------+ | FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') | +-----------------+--------------------------+ | 1,234 | 1.234 | +-----------------+--------------------------+
Dus ook al heb ik lc_time_names
naar de_DE
eerst de eerste aanroep naar FORMAT()
negeerde dat. Toen ik de functie de tweede keer aanriep, specificeerde ik expliciet dezelfde taal/landinstelling als het derde argument, en het werkte.