sql >> Database >  >> RDS >> MariaDB

Benoemde tijdzones instellen in MariaDB

Als u benoemde tijdzones in MariaDB wilt gebruiken, moet u ervoor zorgen dat deze zijn geconfigureerd.

Met "benoemde tijdzones" bedoel ik het kunnen gebruiken van strings zoals America/Los_Angeles in plaats van −08:00 of −07:00 bij het opgeven van de tijdzone. Bij gebruik van bijvoorbeeld de CONVERT_TZ() functie.

Hier leest u hoe u benoemde tijdzones in MariaDB kunt configureren.

Tijdzonetabellen

MariaDB heeft de volgende tijdzonetabellen in de mysql databank:

  • time_zone
  • time_zone_leap_second
  • time_zone_name
  • time_zone_transition
  • time_zone_transition_type

Standaard worden deze tabellen gemaakt, maar niet gevuld.

Als u benoemde tijdzones wilt gebruiken, moet u deze tabellen vullen. De methode om dit te doen hangt af van uw systeem (d.w.z. of uw systeem daadwerkelijk tijdzone-informatie bevat).

Unix-achtige systemen

De reden dat de bovenstaande tijdzonetabellen standaard leeg zijn, is omdat het meestal beter is dat het systeem de tijdzone afhandelt, indien mogelijk.

De meeste Unix-achtige systemen zoals Linux, Mac OS X, FreeBSD en Solaris hebben een zoneinfo-database. Deze zoneinfo-database kan in de tijdzonetabellen in MariaDB worden geladen met de mysql_tzinfo_to_sql hulpprogramma.

Als uw systeem een ​​zoneinfo-database bevat, verdient het de voorkeur dat u deze methode gebruikt om de tijdzonetabellen te vullen. Anders kunt u een verschil veroorzaken in de datetime-afhandeling tussen MariaDB en andere toepassingen op uw systeem.

Om de tijdzonetabellen te laden, opent u een terminalvenster en voert u het volgende uit:

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

Voer het wachtwoord in voor de root gebruiker. Als je de foutmelding 'toegang geweigerd' krijgt, bekijk dan deze oplossing.

Dat is het. De tijdzonetabellen zouden nu gevuld moeten zijn.

In mijn geval kreeg ik één waarschuwing:

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

Deze waarschuwing kan veilig worden genegeerd.

Deze waarschuwing is waarschijnlijk te wijten aan het feit dat Unix-achtige systemen geen schrikkelseconden bevatten. Dat wil zeggen, Unix-achtige systemen kunnen de schrikkelseconde niet weergeven in de vorm van 23:59:60 . In plaats daarvan gebruikt het dezelfde seconde twee keer.

Dit voldoet aan de POSIX-standaard (Portable Operating System Interface), die vereist dat schrikkelseconden worden weggelaten uit de gerapporteerde tijd.

Windows, HP-UX-systemen

Sommige systemen, zoals Windows en HP-UX hebben geen zoneinfo-database, dus u moet de tijdzonetabellen via SQL-script laden als u deze besturingssystemen gebruikt.

Zie de MySQL-documentatie voor de scripts en installatie-instructies.

Controleer de tijdzonetabellen

Zodra de tijdzonetabellen zijn gevuld, kunnen we een snelle query uitvoeren om te controleren of ze daadwerkelijk zijn ingevuld.

Voorbeeld:

SELECT * 
FROM mysql.time_zone_name
LIMIT 10;

Resultaat:

+--------------------+--------------+
| 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 dit geval heb ik de top 10 resultaten geselecteerd uit de time_zone_name tafel.

Dit is het volledige aantal:

SELECT COUNT(*) 
FROM mysql.time_zone_name;

Resultaat:

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

U kunt desgewenst door de andere tabellen bladeren.


  1. MySQL/PHP-fout:[2002] Slechts één gebruik van elk socketadres (protocol/netwerkadres/poort) is normaal gesproken toegestaan

  2. Oracle SQL-volgorde in subquery-problemen!

  3. Hoe MySQL op macOS te installeren

  4. Benchmarking handmatige database-implementaties versus geautomatiseerde implementaties