Trabajando con zonas horarias de MySQL-Mariadb

Trabajando con zonas horarias de MySQL-Mariadb
Para cualquier programa, ya sea una aplicación web, servidor API, software de escritorio, tableta o aplicación de teléfono, trabajar con las zonas horarias es una tarea bastante común es.

En este artículo, le mostraré cómo instalar las bases de datos de la zona horaria en el servidor de base de datos MySQL y Mariadb y usarlo. He probado los pasos que se muestran en este artículo en Centos 8 y Ubuntu 18.04 LTS. Pero debería funcionar en CentOS/Rhel 7+, Ubuntu 18.04+ y Debian 10+. Entonces empecemos.

Prerrequisitos:

Debes tener instalado mysql o mariadb en tu sistema operativo Linux (yo.mi. Centos/Rhel, Ubuntu/Debian). Si necesita ayuda para instalar MySQL/MariadB, hay muchos artículos en Linuxhint.com que puedes comprobar.

Instalación de datos de zona horaria en CentOS/RHEL:

En Centos/Rhel, el tzdata El paquete proporciona información de zona horaria. El tzdata el paquete debe instalarse de forma predeterminada.

Si en algún caso, no está instalado, puede instalarlo con los siguientes comandos:

$ sudo dnf makecache
$ sudo dnf install tzData

NOTA: En CentOS/RHEL 7, use beque en lugar de DNF.

Instalación de datos de zona horaria en Ubuntu/Debian:

En Ubuntu/Debian, el tzdata El paquete proporciona información de zona horaria. El tzdata el paquete debe instalarse de forma predeterminada.

Si en algún caso, no está instalado, puede instalarlo con los siguientes comandos:

$ sudo apt actualización
$ sudo apt install tzData

Convertir datos de la zona horaria a SQL:

Los datos de la zona horaria deben estar en el /usr/share/zoneinfo/ Directorio de CentOS/Rhel y Ubuntu/Debian OS.

$ LS/USR/Share/ZoneInfo/

Como puede ver, los datos de la zona horaria están bien organizadas en diferentes carpetas.

Los archivos de datos de la zona horaria son binarios. No puede usarlos directamente con las bases de datos MySQL/mariadb.

$ CAT/USR/Share/ZoneInfo/America/Toronto

Debe convertir los datos de la zona horaria binaria (desde el /usr/share/zoneinfo/ directorio) a SQL usando el mysql_tzinfo_to_sql programa.

Para convertir los datos de la zona horaria a SQL, ejecute mysql_tzinfo_to_sql como sigue:

$ mysql_tzinfo_to_sql/usr/share/zoneinfo/> ~/zoneinfo.sql

Un nuevo archivo ZONAINFO.sql debe crearse en su directorio de inicio. Puede importar la información de la zona horaria a su base de datos MySQL/mariadb desde este archivo.

Importación de datos de zona horaria a MySQL/MariadB:

Puede importar la información de la zona horaria del ZONAINFO.sql Archivo en el mysql base de datos de la siguiente manera:

$ Cat ~/ZoneInfo.SQL | sudo mysql -u root mysql -p

Ahora, escriba su contraseña de raíz de la base de datos MySQL/mariadb y presione . La información de la zona horaria debe importarse.

Configuración de la zona horaria predeterminada/global en MySQL/mariadb:

De forma predeterminada, la zona horaria predeterminada/global de MySQL/MariadB se establece en la zona horaria del sistema operativo. Puede establecer una zona horaria predeterminada/global diferente si lo desea.

> Seleccionar @@ time_zone;

Primero, debe encontrar el nombre de la zona horaria que desea establecer. Puede encontrar todos los nombres de zona horaria disponibles con la siguiente instrucción SQL:

> Seleccione el nombre de MySQL.Time_zone_name;

También puede buscar el nombre de su zona horaria deseada de la siguiente manera:

> Seleccione el nombre de MySQL.Time_zone_name donde nombre como '%%';

Ahora, puede establecer su zona horaria deseada como zona horaria predeterminada/global de la siguiente manera:

> Establecer global time_zone = "";

Su zona horaria deseada debe establecerse como zona horaria predeterminada/global.

> Seleccionar @@ time_zone;

Trabajando con zonas horarias en mysql/mariadb:

El Convert_tz () La función se utiliza para convertir la zona horaria de una fecha y hora en mysql/mariadb.

La sintaxis del Convert_tz () la función es:

Convert_tz (DateTime, from_tz, to_tz)

Aquí, de_tz y to_tz puede ser un nombre de la zona horaria (yo.mi. Asia/Dhaka, América/New_york), o compensación de zona horaria (i.mi. +06:00, -02: 00).

El fecha y hora se convierte de de_tz a to_tz zona horaria.

Puede imprimir la marca de tiempo actual (fecha y hora actual) de su computadora con la siguiente instrucción SQL:

> Seleccione Current_Timestamp ();

Ahora, digamos, desea convertir la zona horaria de la fecha y hora actuales de su computadora a Europa/Londres. Para hacer eso, puedes ejecutar el Convert_tz () función de la siguiente manera:

> Seleccione Current_Timestamp () como dt_dhaka, convert_tz (current_timestamp (),
@@ Time_zone, 'Europa/Londres') como dt_london;

Como puede ver, la zona horaria de la hora de fecha actual se convierte en Europa/Londres exitosamente.

También puede convertir la zona horaria de la fecha de detección específica de la siguiente manera:

> Set @dt = '2001-01-03 11:02:11';
> Seleccionar @dt, convert_tz (@dt, 'America/Panamá', 'Europa/Londres');

También puede convertir la zona horaria de los campos de fecha y hora de una tabla. Para la demostración, usaré una mesa de cumpleaños simple en este artículo.

Primero, crea un cumpleaños tabla de la siguiente manera:

> Crear cumpleaños Cumpleaños (nombre Varchar (20) No nulo,
birth_timestamp dateTime no nulo);

El cumpleaños La tabla tiene solo 2 campos, nombre y Birth_timestamp Como puede ver en la captura de pantalla a continuación.

> Describir el cumpleaños;

Ahora, inserte algunos datos de cumpleaños ficticios en el cumpleaños tabla de la siguiente manera:

> Insertar en valores de cumpleaños ('Bob', '1997-10-11 12:11:11'),
('Alex', '1987-01-11 01:41:01'), ('Lily', '2001-01-02 20:11:36');

Aquí están los datos de cumpleaños ficticios.

> Seleccionar * del cumpleaños;

Ahora, puede convertir la zona horaria de todas las marcas de tiempo de cumpleaños para Europa/Londres como sigue:

> Seleccione Nombre, Birth_Timestamp, Convert_tz (Birth_timestamp, @@ Time_zone,
'Europa/Londres') como Londres_Birth_Timestamp desde el cumpleaños;

Como puede ver, las zonas horarias de cumpleaños se convierten correctamente.

Entonces, así es básicamente como trabajas con zonas horarias mysql/mariadb. Gracias por leer este artículo.