Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como definir a localidade para a conexão atual no MySQL


Existem certas funções de data no MySQL que retornam um nome de dia ou mês. Em particular, estou me referindo ao DATE_FORMAT() , DAYNAME() e MONTHNAME() funções. Eles podem retornar um valor de, digamos, novembro , ou segunda-feira , dependendo da consulta que está sendo usada. Mas os resultados podem ser facilmente retornados em um idioma diferente, se necessário.

A linguagem que essas funções usam para seu valor de retorno é derivada do lc_time_names variável do sistema. Você pode visualizar o valor desta variável ou definir sua SESSION valor para que os resultados dessas funções estejam no idioma/localidade desejados.

Os nomes de localidade têm subtags de idioma e região listadas pela Internet Assigned Numbers Authority (IANA). Os exemplos incluem en_US para Inglês – Estados Unidos , en_NZ para Inglês – Nova Zelândia , ou es_PA para Espanhol – Panamá , etc (para obter uma lista de localidades compatíveis com o MySQL, consulte Lista completa de localidades no MySQL).

Neste artigo, mostrarei como encontrar a localidade atual da sua conexão, alterá-la e ver como isso afeta os resultados de uma consulta. Também mostro uma função imune a essa configuração (mas não se preocupe, essa função permite especificar a localidade).


Visualizar a localidade atual


Primeiro, vamos ver qual é o valor atual do lc_time_names variável do sistema.
SELECT @@lc_time_names;

Resultado:
+-----------------+| @@lc_time_names |+-----------------+| pt_BR |+-----------------+

Portanto, minha localidade atual é en_US . Na verdade, esse é o valor padrão, independentemente da configuração de localidade do seu sistema (mas isso pode ser alterado na inicialização do servidor ou definindo o GLOBAL valor).

Alterar a localidade


Agora vamos alterar a localidade e ver o resultado.
SET lc_time_names ='de_BE';SELECT @@lc_time_names;

Resultado:
+-----------------+| @@lc_time_names |+-----------------+| de_BE |+-----------------+

Nesse caso, alterei a localidade para de_BE , que é para Alemão – Bélgica .

Exemplo de uso


Aqui está um exemplo em que defino a localidade e executo uma consulta que retorna um nome de mês. Em seguida, defino a localidade para um valor diferente e executo a mesma consulta novamente.

1ª localidade:inglês – Estados Unidos

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

Resultado:
+-------------------------+| NOME DO MÊS('1999-10-03') |+-------------------------+| Outubro |+-------------------------+

2ª localidade:espanhol – Espanha

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

Resultado:
+-------------------------+| NOME DO MÊS('1999-10-03') |+-------------------------+| outubro |+-------------------------+

A função FORMAT()


O valor de lc_time_names não afeta o FORMAT() função, mas esta função aceita um terceiro argumento que permite especificar a localidade. Aqui está um exemplo do que quero dizer.
SET lc_time_names ='de_DE';SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');

Resultado:
+-----------------+--------------------------+| FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') |+-----------------+-------------------- ------+| 1.234 | 1.234 |+-----------------+--------------------------+ 
Então, mesmo que eu configure lc_time_names para de_DE primeiro, a chamada inicial para FORMAT() ignorou isso. Quando chamei a função pela segunda vez, especifiquei explicitamente esse mesmo idioma/localidade como o terceiro argumento e funcionou.