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.