sql >> Database >  >> RDS >> Mysql

De landinstelling instellen voor de huidige verbinding in MySQL

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.


  1. Hoe wijzig ik het gegevenstype voor een kolom in MySQL?

  2. Django-formulier om database (modellen) op te vragen

  3. Installeer pdo voor postgres Ubuntu

  4. Kan sorteerconflict niet oplossen