sql >> Databasteknik >  >> RDS >> MariaDB

Hur man ställer in namngivna tidszoner i MariaDB

Om du vill använda namngivna tidszoner i MariaDB måste du se till att de har konfigurerats.

Med "namngivna tidszoner" menar jag att kunna använda strängar som America/Los_Angeles istället för −08:00 eller −07:00 när du anger tidszonen. Till exempel när du använder CONVERT_TZ() funktion.

Så här konfigurerar du namngivna tidszoner i MariaDB.

Tidszonstabeller

MariaDB har följande tidszonstabeller i mysql databas:

  • time_zone
  • time_zone_leap_second
  • time_zone_name
  • time_zone_transition
  • time_zone_transition_type

Som standard skapas dessa tabeller, men fylls inte i.

För att använda namngivna tidszoner måste du fylla i dessa tabeller. Metoden för att göra detta beror på ditt system (dvs. om ditt system faktiskt innehåller tidszonsinformation eller inte).

Unix-liknande system

Anledningen till att ovanstående tidszonstabeller är tomma som standard är att det vanligtvis är bättre att systemet hanterar tidszonen, om möjligt.

De flesta Unix-liknande system som Linux, Mac OS X, FreeBSD och Solaris har en zoneinfo-databas. Denna zoninfo-databas kan laddas in i tidszonstabellerna i MariaDB med mysql_tzinfo_to_sql verktyg.

Om ditt system innehåller en zoneinfo-databas är det att föredra att du använder den här metoden för att fylla i tidszonstabellerna. Annars kan du orsaka en skillnad i datetime-hantering mellan MariaDB och andra applikationer på ditt system.

För att ladda tidszonstabellerna, öppna ett terminalfönster och kör följande:

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

Ange lösenordet för root användare. Om du får ett "access denied"-fel, se denna korrigering.

Det är allt. Tidszonstabellerna bör nu fyllas i.

I mitt fall fick jag en varning:

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

Denna varning kan säkert ignoreras.

Denna varning beror förmodligen på det faktum att Unix-liknande system inte inkluderar skottsekunder. Det vill säga, Unix-liknande system har inget sätt att representera skottsekunden i form av 23:59:60 . Istället använder den bara samma sekund två gånger.

Detta följer standarden POSIX (Portable Operating System Interface) som kräver att skottsekunder utelämnas från den rapporterade tiden.

Windows, HP-UX-system

Vissa system, som Windows och HP-UX, har ingen zoninfodatabas, så du måste ladda tidszonstabellerna via SQL-skript om du använder dessa operativsystem.

Se MySQL-dokumentationen för skript och installationsinstruktioner.

Kontrollera tidszonstabellerna

När tidszonstabellerna har fyllts i kan vi köra en snabb fråga för att kontrollera att de faktiskt är ifyllda.

Exempel:

SELECT * 
FROM mysql.time_zone_name
LIMIT 10;

Resultat:

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

I det här fallet valde jag de 10 bästa resultaten från time_zone_name tabell.

Här är hela räkningen:

SELECT COUNT(*) 
FROM mysql.time_zone_name;

Resultat:

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

Du kan gå igenom de andra tabellerna efter behov.


  1. Hur kan jag distribuera en .NET-applikation som använder ODAC utan att installera hela komponenten för användaren?

  2. skickar tabell- och kolumnnamn dynamiskt med bindningsvariabler

  3. Oracle SQL pivotfråga

  4. Sortering av arrayelement