MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come impostare fusi orari con nome in MariaDB

Se desideri utilizzare i fusi orari con nome in MariaDB, devi assicurarti che siano stati configurati.

Per "fusi orari con nome", intendo essere in grado di utilizzare stringhe come America/Los_Angeles invece di −08:00 o −07:00 quando si specifica il fuso orario. Ad esempio, quando si utilizza CONVERT_TZ() funzione.

Ecco come configurare i fusi orari con nome in MariaDB.

Tabelle dei fusi orari

MariaDB ha le seguenti tabelle di fuso orario in mysql banca dati:

  • time_zone
  • time_zone_leap_second
  • time_zone_name
  • time_zone_transition
  • time_zone_transition_type

Per impostazione predefinita, queste tabelle vengono create, ma non popolate.

Per utilizzare i fusi orari con nome, è necessario popolare queste tabelle. Il metodo per farlo dipenderà dal tuo sistema (cioè se il tuo sistema contiene effettivamente o meno informazioni sul fuso orario).

Sistemi simili a Unix

Il motivo per cui le tabelle dei fusi orari sopra sono vuote per impostazione predefinita è perché di solito è meglio che il sistema gestisca il fuso orario, se possibile.

La maggior parte dei sistemi simili a Unix come Linux, Mac OS X, FreeBSD e Solaris hanno un database zoneinfo. Questo database zoneinfo può essere caricato nelle tabelle dei fusi orari in MariaDB con mysql_tzinfo_to_sql utilità.

Se il tuo sistema contiene un database zoneinfo, è preferibile utilizzare questo metodo per popolare le tabelle dei fusi orari. Altrimenti potresti causare una differenza nella gestione della data e dell'ora tra MariaDB e altre applicazioni sul tuo sistema.

Per caricare le tabelle dei fusi orari, apri una finestra di terminale ed esegui quanto segue:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Immettere la password per il root utente. Se ricevi un errore di "accesso negato", vedi questa correzione.

Questo è tutto. Le tabelle dei fusi orari dovrebbero ora essere popolate.

Nel mio caso ho ricevuto un avviso:

Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.

Questo avviso può essere tranquillamente ignorato.

Questo avviso è probabilmente dovuto al fatto che i sistemi simili a Unix non includono i secondi intercalari. Cioè, i sistemi simili a Unix non hanno modo di rappresentare il secondo intercalare sotto forma di 23:59:60 . Invece usa solo lo stesso secondo due volte.

Ciò aderisce allo standard POSIX (Portable Operating System Interface), che richiede che i secondi intercalari vengano omessi dal tempo riportato.

Windows, sistemi HP-UX

Alcuni sistemi, come Windows e HP-UX non dispongono di un database zoneinfo, quindi dovrai caricare le tabelle dei fusi orari tramite script SQL se stai utilizzando questi sistemi operativi.

Consulta la documentazione di MySQL per gli script e le istruzioni di installazione.

Controlla le tabelle dei fusi orari

Una volta che le tabelle dei fusi orari sono state popolate, possiamo eseguire una rapida query per verificare che siano effettivamente popolate.

Esempio:

SELECT * 
FROM mysql.time_zone_name
LIMIT 10;

Risultato:

+--------------------+--------------+
| Name               | Time_zone_id |
+--------------------+--------------+
| Africa/Abidjan     |            1 |
| Africa/Accra       |            2 |
| Africa/Addis_Ababa |            3 |
| Africa/Algiers     |            4 |
| Africa/Asmara      |            5 |
| Africa/Asmera      |            6 |
| Africa/Bamako      |            7 |
| Africa/Bangui      |            8 |
| Africa/Banjul      |            9 |
| Africa/Bissau      |           10 |
+--------------------+--------------+

In questo caso ho selezionato i primi 10 risultati da time_zone_name tavolo.

Ecco il conteggio completo:

SELECT COUNT(*) 
FROM mysql.time_zone_name;

Risultato:

+----------+
| COUNT(*) |
+----------+
|      594 |
+----------+

Puoi scorrere le altre tabelle come richiesto.