Mysql
 sql >> Database >  >> RDS >> Mysql

Come impostare la localizzazione per la connessione corrente in MySQL

Esistono alcune funzioni di data in MySQL che restituiscono il nome di un giorno o di un mese. In particolare, mi riferisco a DATE_FORMAT() , DAYNAME() e MONTHNAME() funzioni. Questi potrebbero restituire un valore, ad esempio, Novembre o lunedì , a seconda della query utilizzata. Ma i risultati potrebbero essere restituiti altrettanto facilmente in una lingua diversa, se necessario.

Il linguaggio che queste funzioni usano per il loro valore di ritorno è derivato da lc_time_names variabile di sistema. Puoi visualizzare il valore di questa variabile o impostarne la SESSION valore in modo che i risultati di queste funzioni siano nella lingua/locale desiderati.

I nomi delle località hanno sottotag di lingua e regione elencati dalla Internet Assigned Numbers Authority (IANA). Gli esempi includono en_US per Inglese – Stati Uniti , en_NZ per Inglese – Nuova Zelanda o es_PA per Spagnolo – Panama , ecc. (per un elenco delle impostazioni internazionali supportate da MySQL, consulta Elenco completo delle impostazioni internazionali in MySQL).

In questo articolo, ti mostrerò come trovare la locale corrente per la tua connessione, cambiarla e quindi vedere come influisce sui risultati di una query. Ti mostro anche una funzione che è immune a questa impostazione (ma non preoccuparti, questa funzione ti consente di specificare la localizzazione).

Visualizza la lingua corrente

Per prima cosa, vediamo qual è il valore corrente di lc_time_names variabile di sistema.

SELECT @@lc_time_names;

Risultato:

+-----------------+
| @@lc_time_names |
+-----------------+
| en_US           |
+-----------------+

Quindi la mia lingua attuale è en_US . Questo è in realtà il valore predefinito indipendentemente dalle impostazioni internazionali del tuo sistema (ma può essere modificato all'avvio del server o impostando GLOBAL valore).

Cambia le impostazioni internazionali

Ora cambiamo la localizzazione e vediamo il risultato.

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

Risultato:

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

In questo caso, ho cambiato la locale in de_BE , che sta per tedesco – Belgio .

Esempio di utilizzo

Ecco un esempio in cui ho impostato la locale, quindi ho eseguito una query che restituisce il nome di un mese. Ho quindi impostato le impostazioni internazionali su un valore diverso, quindi ho eseguito di nuovo la stessa query.

1a Locale:Inglese – Stati Uniti

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

Risultato:

+-------------------------+
| MONTHNAME('1999-10-03') |
+-------------------------+
| October                 |
+-------------------------+

2a Locale:spagnolo – Spagna

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

Risultato:

+-------------------------+
| MONTHNAME('1999-10-03') |
+-------------------------+
| octubre                 |
+-------------------------+

La funzione FORMAT()

Il valore di lc_time_names non influisce su FORMAT() funzione, ma questa funzione accetta un terzo argomento che consente di specificare la locale. Ecco un esempio di cosa intendo.

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

Risultato:

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

Quindi, anche se ho impostato lc_time_names a de_DE prima, la chiamata iniziale a FORMAT() l'ho ignorato. Quando ho chiamato la funzione la seconda volta, ho specificato esplicitamente la stessa lingua/locale come 3° argomento e ha funzionato.