W MySQL istnieją pewne funkcje daty, które zwracają nazwę dnia lub miesiąca. W szczególności mam na myśli DATE_FORMAT()
, DAYNAME()
i MONTHNAME()
Funkcje. Mogą zwrócić wartość np. listopad lub poniedziałek , w zależności od używanego zapytania. Ale wyniki mogą być równie łatwo zwrócone w innym języku, jeśli zajdzie taka potrzeba.
Język, którego te funkcje używają do zwracanych wartości, pochodzi z lc_time_names
zmienna systemowa. Możesz wyświetlić wartość tej zmiennej lub ustawić jej SESSION
wartość, aby wyniki tych funkcji były w żądanym języku/regionie.
Nazwy ustawień regionalnych mają podtagi języka i regionu wymienione przez Internet Assigned Numbers Authority (IANA). Przykłady obejmują en_US
dla angielskiego – Stany Zjednoczone , en_NZ
dla angielskiego – Nowa Zelandia lub es_PA
hiszpański – Panama , itp. (Aby zapoznać się z listą lokalizacji obsługiwanych przez MySQL, zobacz Pełna lista lokalizacji w MySQL).
W tym artykule pokażę, jak znaleźć bieżące ustawienia regionalne dla połączenia, zmienić je, a następnie zobaczyć, jak wpływa to na wyniki zapytania. Pokazuję również funkcję, która jest odporna na to ustawienie (ale nie martw się, ta funkcja pozwala określić lokalizację).
Wyświetl bieżące ustawienia regionalne
Najpierw zobaczmy, jaka jest aktualna wartość lc_time_names
zmienna systemowa.
SELECT @@lc_time_names;
Wynik:
+-----------------+ | @@lc_time_names | +-----------------+ | en_US | +-----------------+
Więc moja obecna lokalizacja to en_US
. W rzeczywistości jest to wartość domyślna, niezależnie od ustawień regionalnych systemu (ale można to zmienić podczas uruchamiania serwera lub ustawiając GLOBAL
wartość).
Zmień ustawienia regionalne
Teraz zmieńmy ustawienia regionalne i zobaczmy wynik.
SET lc_time_names = 'de_BE'; SELECT @@lc_time_names;
Wynik:
+-----------------+ | @@lc_time_names | +-----------------+ | de_BE | +-----------------+
W tym przypadku zmieniłem lokalizację na de_BE
, czyli niemiecki – Belgia .
Przykład użycia
Oto przykład, w którym ustawiam ustawienia regionalne, a następnie uruchamiam zapytanie, które zwraca nazwę miesiąca. Następnie ustawiam ustawienia regionalne na inną wartość, a następnie ponownie uruchamiam to samo zapytanie.
1. lokalizacja:angielski – Stany Zjednoczone
SET lc_time_names = 'en_US'; SELECT MONTHNAME('1999-10-03');
Wynik:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | October | +-------------------------+
Drugie miejsce:hiszpański – Hiszpania
SET lc_time_names = 'es_ES'; SELECT MONTHNAME('1999-10-03');
Wynik:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | octubre | +-------------------------+
Funkcja FORMAT()
Wartość lc_time_names
nie wpływa na FORMAT()
funkcji, ale ta funkcja akceptuje trzeci argument, który pozwala określić ustawienia regionalne. Oto przykład tego, co mam na myśli.
SET lc_time_names = 'de_DE'; SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
Wynik:
+-----------------+--------------------------+ | FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') | +-----------------+--------------------------+ | 1,234 | 1.234 | +-----------------+--------------------------+
Więc nawet jeśli ustawiłem lc_time_names
do de_DE
najpierw początkowe wywołanie FORMAT()
zignorował to. Kiedy wywołałem funkcję po raz drugi, wyraźnie określiłem ten sam język/lokal co trzeci argument i zadziałało.