sql >> Base de Datos >  >> RDS >> MariaDB

Cómo configurar zonas horarias con nombre en MariaDB

Si desea utilizar zonas horarias con nombre en MariaDB, deberá asegurarse de que se hayan configurado.

Por "zonas horarias con nombre", me refiero a poder usar cadenas como America/Los_Angeles en lugar de −08:00 o −07:00 al especificar la zona horaria. Por ejemplo, al usar CONVERT_TZ() función.

Aquí se explica cómo configurar zonas horarias con nombre en MariaDB.

Tablas de zonas horarias

MariaDB tiene las siguientes tablas de zonas horarias en mysql base de datos:

  • time_zone
  • time_zone_leap_second
  • time_zone_name
  • time_zone_transition
  • time_zone_transition_type

De forma predeterminada, estas tablas se crean, pero no se rellenan.

Para usar zonas horarias con nombre, debe completar estas tablas. El método para hacer esto dependerá de su sistema (es decir, si su sistema contiene o no información de zona horaria).

Sistemas similares a Unix

La razón por la que las tablas de zonas horarias anteriores están vacías de forma predeterminada es que, si es posible, normalmente es mejor que el sistema maneje la zona horaria.

La mayoría de los sistemas similares a Unix, como Linux, Mac OS X, FreeBSD y Solaris, tienen una base de datos zoneinfo. Esta base de datos zoneinfo se puede cargar en las tablas de zonas horarias en MariaDB con mysql_tzinfo_to_sql utilidad.

Si su sistema contiene una base de datos zoneinfo, es preferible que utilice este método para completar las tablas de zonas horarias. De lo contrario, puede causar una diferencia en el manejo de fecha y hora entre MariaDB y otras aplicaciones en su sistema.

Para cargar las tablas de zonas horarias, abra una ventana de terminal y ejecute lo siguiente:

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

Ingrese la contraseña para el root usuario. Si obtiene un error de "acceso denegado", consulte esta corrección.

Eso es todo. Las tablas de zonas horarias ahora deberían estar llenas.

En mi caso, recibí una advertencia:

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

Esta advertencia se puede ignorar con seguridad.

Esta advertencia probablemente se deba al hecho de que los sistemas similares a Unix no incluyen segundos intercalares. Es decir, los sistemas similares a Unix no tienen forma de representar el segundo bisiesto en forma de 23:59:60 . En cambio, solo usa el mismo segundo dos veces.

Esto se adhiere al estándar POSIX (Interfaz de sistema operativo portátil), que requiere que se omitan los segundos bisiestos del tiempo informado.

Windows, sistemas HP-UX

Algunos sistemas, como Windows y HP-UX, no tienen una base de datos zoneinfo, por lo que deberá cargar las tablas de zonas horarias a través de un script SQL si está utilizando estos sistemas operativos.

Consulte la documentación de MySQL para conocer los scripts y las instrucciones de instalación.

Consulte las tablas de zonas horarias

Una vez que se han completado las tablas de zonas horarias, podemos ejecutar una consulta rápida para verificar que, de hecho, estén completas.

Ejemplo:

SELECT * 
FROM mysql.time_zone_name
LIMIT 10;

Resultado:

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

En este caso, seleccioné los 10 mejores resultados de time_zone_name mesa.

Aquí está el recuento completo:

SELECT COUNT(*) 
FROM mysql.time_zone_name;

Resultado:

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

Puede recorrer las otras tablas según sea necesario.