V MySQL existují určité funkce pro datum, které vracejí název dne nebo název měsíce. Konkrétně mám na mysli DATE_FORMAT()
, DAYNAME()
a MONTHNAME()
funkcí. Ty mohou vrátit hodnotu řekněme listopad nebo pondělí v závislosti na použitém dotazu. Ale výsledky lze stejně snadno v případě potřeby vrátit v jiném jazyce.
Jazyk, který tyto funkce používají pro svou návratovou hodnotu, je odvozen z lc_time_names
systémová proměnná. Můžete zobrazit hodnotu této proměnné nebo nastavit její SESSION
hodnotu, aby výsledky těchto funkcí byly v požadovaném jazyce/národním prostředí.
Názvy lokalit mají podštítky jazyka a oblasti uvedené úřadem IANA (Internet Assigned Numbers Authority). Příklady zahrnují en_US
pro angličtinu – Spojené státy americké , en_NZ
pro angličtinu – Nový Zéland nebo es_PA
pro španělštinu – Panama , atd. (seznam lokalit podporovaných MySQL naleznete v Úplném seznamu lokalit v MySQL).
V tomto článku vám ukážu, jak najít aktuální národní prostředí pro vaše připojení, změnit jej a poté zjistit, jak to ovlivní výsledky dotazu. Také vám ukážu funkci, která je vůči tomuto nastavení imunní (ale nebojte se, tato funkce vám umožňuje určit národní prostředí).
Zobrazit aktuální národní prostředí
Nejprve se podívejme, jaká je aktuální hodnota lc_time_names
systémová proměnná.
SELECT @@lc_time_names;
Výsledek:
+------------------+| @@lc_time_names |+------------------+| en_US |+-----------------+
Moje aktuální národní prostředí je tedy en_US
. Toto je ve skutečnosti výchozí hodnota bez ohledu na nastavení národního prostředí vašeho systému (to však lze změnit při spuštění serveru nebo nastavením GLOBAL
hodnota).
Změna národního prostředí
Nyní změňme národní prostředí a zobrazme výsledek.
SET lc_time_names ='de_BE';SELECT @@lc_time_names;
Výsledek:
+------------------+| @@lc_time_names |+------------------+| de_BE |+-----------------+
V tomto případě jsem změnil národní prostředí na de_BE
, což je pro němčinu – Belgii .
Příklad použití
Zde je příklad, kdy nastavím národní prostředí a poté spustím dotaz, který vrátí název měsíce. Poté nastavím národní prostředí na jinou hodnotu a poté spustím stejný dotaz znovu.
1. národní prostředí:angličtina – Spojené státy americké
SET lc_time_names ='cs_US';SELECT MONTHNAME('1999-10-03');
Výsledek:
+-------------------------+| MONTHNAME('1999-10-03') |+-------------------------+| říjen |+-------------------------+
2. lokalita:španělština – Španělsko
SET lc_time_names ='es_ES';SELECT MONTHNAME('1999-10-03');
Výsledek:
+-------------------------+| MONTHNAME('1999-10-03') |+-------------------------+| octubre |+-------------------------+
Funkce FORMAT()
Hodnota lc_time_names
nemá vliv na FORMAT()
funkce, ale tato funkce přijímá 3. argument, který vám umožňuje určit národní prostředí. Zde je příklad toho, co mám na mysli.
SET lc_time_names ='de_DE';SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
Výsledek:
+-----------------+--------------------------+| FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') |+-----------------+-------------------- ------+| 1,234 | 1,234 |+-----------------+--------------------------+Takže i když jsem nastavil
lc_time_names
dode_DE
nejprve počáteční voláníFORMAT()
to ignoroval. Když jsem funkci zavolal podruhé, explicitně jsem specifikoval stejný jazyk/místní prostředí jako 3. argument a fungovalo to.