Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak ustawić ustawienia regionalne dla bieżącego połączenia w MySQL?

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL InnoDB nie zwalnia miejsca na dysku po usunięciu wierszy danych z tabeli

  2. Jak zainstalować phpMyAdmin we własnej aplikacji?

  3. Czy istnieje sposób na uruchomienie MySQL w pamięci dla przypadków testowych JUnit?

  4. Jak podłączyć bazę danych mySQL za pomocą C++

  5. Kolumna zmiany nazwy MySQL