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.