Arbeider med MySQL-Mariadb tidssoner

Arbeider med MySQL-Mariadb tidssoner
For ethvert program, enten det er en webapp, API -server, stasjonær programvare, nettbrett eller telefonapp, er det en ganske vanlig oppgave å jobbe med tidssonene.

I denne artikkelen skal jeg vise deg hvordan du installerer tidssonedatabaser til MySQL og MariaDB -databaseserveren og bruker den. Jeg har testet trinnene som er vist i denne artikkelen på Centos 8 og Ubuntu 18.04 LTS. Men det skal fungere på Centos/Rhel 7+, Ubuntu 18.04+ og Debian 10+. Så la oss komme i gang.

Forutsetninger:

Du må ha MySQL eller MariaDB installert på Linux OS (i.e. Centos/RHEL, Ubuntu/Debian). Hvis du trenger hjelp til å installere MySQL/MariaDB, er det mange artikler om Linuxhint.com som du kan sjekke.

Installere tidssonedata på CentOS/RHEL:

I centos/rhel, tzdata Pakken gir tidssoneinformasjon. De tzdata Pakken skal installeres som standard.

Hvis det i alle fall ikke er installert, kan du installere den med følgende kommandoer:

$ sudo dnf makecache
$ sudo dnf installer tzdata

MERK: På centos/rhel 7, bruk yum i stedet for dnf.

Installere tidssonedata på Ubuntu/Debian:

I Ubuntu/Debian, den tzdata Pakken gir tidssoneinformasjon. De tzdata Pakken skal installeres som standard.

Hvis det i alle fall ikke er installert, kan du installere den med følgende kommandoer:

$ sudo apt oppdatering
$ sudo apt installer tzdata

Konvertere tidssonedata til SQL:

Tidssonedataene skal være i /usr/share/soneinfo/ Directory of Centos/RHEL, og Ubuntu/Debian OS.

$ ls/usr/share/soneinfo/

Som du ser, er tidssonedataene pent ordnet i forskjellige mapper.

Tidssonedatafilene er binære. Du kan ikke bruke dem direkte med MySQL/MariaDB -databaser.

$ katt/usr/share/soneinfo/America/Toronto

Du må konvertere de binære tidssonedataene (fra /usr/share/soneinfo/ katalog) til SQL ved å bruke mysql_tzinfo_to_sql program.

For å konvertere tidssonedataene til SQL, Kjør mysql_tzinfo_to_sql følgende:

$ mysql_tzinfo_to_sql/usr/share/soneinfo/> ~/soneinfo.SQL

En ny fil soneinfo.SQL bør opprettes i hjemmekatalogen din. Du kan importere tidssoneinformasjonen til MySQL/MariaDB -databasen fra denne filen.

Importere tidssonedata til MySQL/MariaDB:

Du kan importere tidssoneinformasjonen fra soneinfo.SQL fil inn i mysql Database som følger:

$ katt ~/soneinfo.SQL | sudo mysql -u root mysql -p

Nå, skriv inn MySQL/MariaDB -databasen ROOT -passordet og trykk . Tidssoneinformasjonen skal importeres.

Angi standard/global tidssone i MySQL/MariaDB:

Som standard er standard/global tidssone for MySQL/MariaDB satt til OS -tidssonen. Du kan angi en annen standard/global tidssone hvis du vil.

> Velg @@ time_zone;

Først må du finne tidssonenavnet du vil angi. Du kan finne alle tilgjengelige tidssonenavn med følgende SQL -setning:

> Velg navn fra MySQL.TIME_ZONE_NAME;

Du kan også søke etter ønsket tidssonenavn som følger:

> Velg navn fra MySQL.TIME_ZONE_NAME HVOR Navn som '%%';

Nå kan du angi ønsket tidssone som standard/global tidssone som følger:

> Sett global time_zone = "";

Din ønskede tidssone skal settes som standard/global tidssone.

> Velg @@ time_zone;

Arbeider med tidssoner i MySQL/MariaDB:

De Convert_tz () Funksjon brukes til å konvertere tidssonen til en datetime i MySQL/MariaDB.

Syntaksen til Convert_tz () funksjon er:

Convert_tz (DateTime, From_tz, to_tz)

Her, fra_tz og TO_TZ kan være et tidssonenavn (i.e. Asia/Dhaka, America/New_York), eller tidssonforskyvning (i.e. +06:00, -02: 00).

De dato tid konverteres fra fra_tz til TO_TZ tidssone.

Du kan skrive ut gjeldende tidsstempel (gjeldende dato og klokkeslett) på datamaskinen med følgende SQL -setning:

> Velg Current_Timestamp ();

La oss si, du vil konvertere tidssonen for gjeldende dato og klokkeslett for datamaskinen din til Europa/London. For å gjøre det, kan du kjøre Convert_tz () funksjon som følger:

> Velg Current_Timestamp () som dt_dhaka, convert_tz (current_timestamp (),
@@ time_zone, 'Europa/London') som DT_LONDON;

Som du ser, blir tidssonen for den nåværende datetiden konvertert til Europa/London vellykket.

Du kan også konvertere tidssone for spesifikk datetime som følger:

> Sett @dt = '2001-01-03 11:02:11';
> Velg @DT, Convert_tz (@DT, 'America/Panama', 'Europe/London');

Du kan også konvertere tidssonen for datetimefeltene i en tabell. For demonstrasjon vil jeg bruke et enkelt bursdagsbord i denne artikkelen.

Først må du lage en fødselsdag Tabell som følger:

> Lag bord bursdag (navn varchar (20) ikke null,
BIRTH_TIMESTAMP DATETIME NOT NULL);

De fødselsdag Tabellen har bare 2 felt, Navn og Birth_timestamp Som du kan se på skjermbildet nedenfor.

> Beskriv bursdag;

Nå, sett inn noen dummy bursdagsdata i fødselsdag Tabell som følger:

> Sett inn bursdagsverdier ('Bob', '1997-10-11 12:11:11'),
('Alex', '1987-01-11 01:41:01'), ('Lily', '2001-01-02 20:11:36');

Her er dummy bursdagsdata.

> Velg * fra bursdag;

Nå kan du konvertere tidssonen til alle bursdagstidsstempene til Europa/London følgende:

> Velg Navn, Birth_Timestamp, Convert_tz (Birth_Timestamp, @@ time_zone,
'Europa/London') som London_Birth_Timestamp fra bursdag;

Som du kan se, blir bursdagssonene konvertert riktig.

Så det er i utgangspunktet hvordan du jobber med MySQL/MariaDB tidssoner. Takk for at du leste denne artikkelen.