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 configurelc_time_names
parade_DE
primeiro, a chamada inicial paraFORMAT()
ignorou isso. Quando chamei a função pela segunda vez, especifiquei explicitamente esse mesmo idioma/localidade como o terceiro argumento e funcionou.