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 ande_DE
zuerst der anfängliche Aufruf vonFORMAT()
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.