Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So legen Sie das Gebietsschema für die aktuelle Verbindung in MySQL fest

In MySQL gibt es bestimmte Datumsfunktionen, die einen Tages- oder Monatsnamen zurückgeben. Insbesondere beziehe ich mich auf das DATE_FORMAT() , DAYNAME() , und MONTHNAME() Funktionen. Diese könnten einen Wert von beispielsweise November zurückgeben , oder Montag , abhängig von der verwendeten Abfrage. Aber die Ergebnisse könnten bei Bedarf genauso einfach in einer anderen Sprache zurückgegeben werden.

Die Sprache, die diese Funktionen für ihren Rückgabewert verwenden, wird von lc_time_names abgeleitet Systemvariable. Sie können den Wert dieser Variablen anzeigen oder ihre SESSION festlegen Wert, sodass die Ergebnisse dieser Funktionen in der gewünschten Sprache/dem gewünschten Gebietsschema vorliegen.

Gebietsschemanamen haben Sprach- und Regions-Subtags, die von der Internet Assigned Numbers Authority (IANA) aufgeführt sind. Beispiele sind en_US für Englisch – USA , en_NZ für Englisch – Neuseeland , oder es_PA für Spanisch – Panama usw. (eine Liste der von MySQL unterstützten Gebietsschemata finden Sie unter Vollständige Liste der Gebietsschemata in MySQL).

In diesem Artikel zeige ich Ihnen, wie Sie das aktuelle Gebietsschema für Ihre Verbindung finden, es ändern und dann sehen, wie es sich auf die Ergebnisse einer Abfrage auswirkt. Ich zeige Ihnen auch eine Funktion, die gegen diese Einstellung immun ist (aber keine Sorge, mit dieser Funktion können Sie das Gebietsschema angeben).

Aktuelles Gebietsschema anzeigen

Lassen Sie uns zuerst sehen, was der aktuelle Wert von lc_time_names ist Systemvariable.

SELECT @@lc_time_names;

Ergebnis:

+----------------+| @@lc_time_names |+----------------+| de_DE |+----------------+

Mein aktuelles Gebietsschema ist also en_US . Dies ist eigentlich der Standardwert, unabhängig von der Gebietsschemaeinstellung Ihres Systems (dies kann jedoch beim Serverstart oder durch Festlegen der GLOBAL Wert).

Ändern Sie das Gebietsschema

Jetzt ändern wir das Gebietsschema und sehen uns das Ergebnis an.

SET lc_time_names ='de_BE';SELECT @@lc_time_names;

Ergebnis:

+----------------+| @@lc_time_names |+----------------+| de_BE |+----------------+

In diesem Fall habe ich das Gebietsschema auf de_BE geändert , was für Deutsch – Belgien steht .

Anwendungsbeispiel

Hier ist ein Beispiel, in dem ich das Gebietsschema festlege und dann eine Abfrage ausführe, die einen Monatsnamen zurückgibt. Dann setze ich das Gebietsschema auf einen anderen Wert und führe dann dieselbe Abfrage erneut aus.

1. Gebietsschema:Englisch – USA

SET lc_time_names ='en_US';SELECT MONTHNAME('1999-10-03');

Ergebnis:

+-------------------------+| MONATSNAME('1999-10-03') |+--------------------+| Oktober |+-------------------------+

2. Gebietsschema:Spanisch – Spanien

SET lc_time_names ='es_ES';SELECT MONTHNAME('1999-10-03');

Ergebnis:

+-------------------------+| MONATSNAME('1999-10-03') |+--------------------+| Oktober |+--------------------+

Die FORMAT()-Funktion

Der Wert von lc_time_names wirkt sich nicht auf FORMAT() aus Funktion, aber diese Funktion akzeptiert ein drittes Argument, mit dem Sie das Gebietsschema angeben können. Hier ist ein Beispiel dafür, was ich meine.

SET lc_time_names ='de_DE';SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');

Ergebnis:

+------------+--------------------------+| FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') |+------------+-------------------- ------+| 1.234 | 1.234 |+------------+---------------------+ 

Obwohl ich also lc_time_names gesetzt habe an de_DE zuerst der anfängliche Aufruf von FORMAT() ignorierte das. Als ich die Funktion das zweite Mal aufgerufen habe, habe ich explizit dieselbe Sprache/Locale als drittes Argument angegeben, und es hat funktioniert.