Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да настроите локала за текущата връзка в MySQL

В MySQL има определени функции за дата, които връщат име на ден или месец. По-специално, имам предвид DATE_FORMAT() , DAYNAME() и MONTHNAME() функции. Те може да връщат стойност, да речем, ноември , или понеделник , в зависимост от използваната заявка. Но резултатите могат също толкова лесно да бъдат върнати на различен език, ако е необходимо.

Езикът, който тези функции използват за връщаната си стойност, се извлича от lc_time_names системна променлива. Можете да видите стойността на тази променлива или да зададете нейната SESSION стойност, така че резултатите от тези функции да са на желания език/локал.

Имената на локали имат езикови и регионални подтагове, изброени от Internet Assigned Numbers Authority (IANA). Примерите включват en_US за английски – САЩ , en_NZ за английски – Нова Зеландия , или es_PA за испански – Панама и т.н. (за списък с локали, поддържани от MySQL, вижте Пълен списък с локали в MySQL).

В тази статия ще ви покажа как да намерите текущия локал за вашата връзка, да го промените и след това да видите как се отразява на резултатите от заявка. Също така ви показвам функция, която е имунизирана срещу тази настройка (но не се притеснявайте, тази функция ви позволява да посочите локала).

Преглед на текущия език

Първо, нека видим каква е текущата стойност на lc_time_names системна променлива.

ИЗБЕРЕТЕ @@lc_time_names;

Резултат:

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

Така че моят текущ локал е en_US . Това всъщност е стойността по подразбиране, независимо от настройката за локал на вашата система (но това може да бъде променено при стартиране на сървъра или чрез задаване на GLOBAL стойност).

Промяна на локала

Сега нека променим локала и да видим резултата.

ЗАДАДЕТЕ lc_time_names ='de_BE';ИЗБЕРЕТЕ @@lc_time_names;

Резултат:

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

В този случай промених локала на de_BE , което е за немски – Белгия .

Пример за употреба

Ето пример, в който задавам локала, след което изпълнявам заявка, която връща име на месец. След това задавам локала на различна стойност, след което изпълнявам отново същата заявка.

1-ви език:английски – Съединени щати

ЗАДАДЕТЕ lc_time_names ='en_US';ИЗБЕРЕТЕ MONTHNAME('1999-10-03');

Резултат:

+------------------------+| MONTHNAME('1999-10-03') |+-------------------------+| октомври |+------------------------+

2-ри език:испански – Испания

ЗАДАДЕТЕ lc_time_names ='es_ES';ИЗБЕРЕТЕ MONTHNAME('1999-10-03');

Резултат:

+------------------------+| MONTHNAME('1999-10-03') |+-------------------------+| октомври |+-------------------------+

Функцията FORMAT()

Стойността на lc_time_names не засяга FORMAT() функция, но тази функция приема трети аргумент, който ви позволява да посочите локала. Ето пример за това, което имам предвид.

ЗАДАДЕТЕ lc_time_names ='de_DE';ИЗБЕРЕТЕ ФОРМАТ(1234, 0), ФОРМАТ(1234, 0, 'de_DE');

Резултат:

+-----------------+-----------------------------------+| ФОРМАТ (1234, 0) | FORMAT(1234, 0, 'de_DE') |+-----------------+------------------- ------+| 1,234 | 1,234 |+------------------+-----------------------------------+ 

Така че, въпреки че зададох lc_time_names до de_DE първо, първоначалното извикване на FORMAT() игнорира това. Когато извиках функцията за втори път, изрично посочих същия език/локал като третия аргумент и тя работи.


  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

  2. MySQL подготвени изявления

  3. MySQL разделя низ, разделен със запетая, във времева таблица

  4. Изтриване на дублиращи се редове от таблица

  5. Оптимизирайте производителността на MySQL/MariaDB с инструмента MySQLTunner