sql >> Base de Datos >  >> RDS >> Mysql

Cómo establecer la configuración regional para la conexión actual en MySQL

Hay ciertas funciones de fecha en MySQL que devuelven un nombre de día o de mes. En particular, me refiero al DATE_FORMAT() , DAYNAME() y MONTHNAME() funciones Estos podrían devolver un valor de, digamos, noviembre o lunes , según la consulta que se utilice. Pero los resultados podrían devolverse fácilmente en un idioma diferente si es necesario.

El lenguaje que utilizan estas funciones para su valor de retorno se deriva de lc_time_names variable del sistema. Puede ver el valor de esta variable o establecer su SESSION valor para que los resultados de estas funciones estén en el idioma/locale deseado.

Los nombres de configuración regional tienen subetiquetas de idioma y región enumeradas por la Autoridad de números asignados de Internet (IANA). Los ejemplos incluyen en_US para inglés – Estados Unidos , en_NZ para Inglés – Nueva Zelanda , o es_PA para español – Panamá , etc. (para obtener una lista de configuraciones regionales admitidas por MySQL, consulte Lista completa de configuraciones regionales en MySQL).

En este artículo, le mostraré cómo encontrar la configuración regional actual para su conexión, cambiarla y luego ver cómo afecta los resultados de una consulta. También te muestro una función que es inmune a esta configuración (pero no te preocupes, esta función te permite especificar la configuración regional).

Ver la configuración regional actual

Primero, veamos cuál es el valor actual de lc_time_names variable del sistema.

SELECT @@lc_time_names;

Resultado:

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

Así que mi ubicación actual es en_US . En realidad, este es el valor predeterminado, independientemente de la configuración regional de su sistema (pero esto se puede cambiar al iniciar el servidor o configurando GLOBAL valor).

Cambiar la configuración regional

Ahora cambiemos la configuración regional y veamos el resultado.

SET lc_time_names = 'de_BE';
SELECT @@lc_time_names;

Resultado:

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

En este caso, cambié la configuración regional a de_BE , que es para alemán – Bélgica .

Ejemplo de uso

Aquí hay un ejemplo en el que configuro la configuración regional y luego ejecuto una consulta que devuelve el nombre de un mes. Luego configuro la configuración regional en un valor diferente y luego vuelvo a ejecutar la misma consulta.

1er idioma:inglés – Estados Unidos

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

Resultado:

+-------------------------+
| MONTHNAME('1999-10-03') |
+-------------------------+
| October                 |
+-------------------------+

2.º Local:Español – España

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

Resultado:

+-------------------------+
| MONTHNAME('1999-10-03') |
+-------------------------+
| octubre                 |
+-------------------------+

Función FORMATO()

El valor de lc_time_names no afecta el FORMAT() función, pero esta función acepta un tercer argumento que le permite especificar la configuración regional. Este es un ejemplo de lo que quiero decir.

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                    |
+-----------------+--------------------------+

Entonces, aunque configuré lc_time_names a de_DE primero, la llamada inicial a FORMAT() ignoró eso. Cuando llamé a la función por segunda vez, especifiqué explícitamente ese mismo idioma/configuración regional como tercer argumento y funcionó.