sql >> Databáze >  >> RDS >> Mysql

Jak nastavit národní prostředí pro aktuální připojení v MySQL

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 do de_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.


  1. Příklad hromadného sběru Oracle PL/SQL s výjimkami uložení

  2. Funkce MySQL LN() – Vrátí přirozený logaritmus čísla

  3. Použití LIKE v bindParam pro dotaz MySQL PDO

  4. Jak v PostgreSQL vložit data pomocí příkazu COPY?