MariaDBで名前付きタイムゾーンを使用する場合は、それらが構成されていることを確認する必要があります。
「名前付きタイムゾーン」とは、America/Los_Angeles
のような文字列を使用できることを意味します −08:00
の代わりに または−07:00
タイムゾーンを指定する場合。たとえば、CONVERT_TZ()
を使用する場合 機能。
MariaDBで名前付きタイムゾーンを構成する方法は次のとおりです。
タイムゾーンテーブル
MariaDBのmysql
には次のタイムゾーンテーブルがあります データベース:
-
time_zone
-
time_zone_leap_second
-
time_zone_name
-
time_zone_transition
-
time_zone_transition_type
デフォルトでは、これらのテーブルは作成されますが、入力されません。
名前付きタイムゾーンを使用するには、これらのテーブルにデータを入力する必要があります。これを行う方法は、システムによって異なります(つまり、システムに実際にタイムゾーン情報が含まれているかどうか)。
Unixライクなシステム
上記のタイムゾーンテーブルがデフォルトで空である理由は、可能であれば、システムがタイムゾーンを処理する方が通常は優れているためです。
Linux、Mac OS X、FreeBSD、SolarisなどのほとんどのUnixライクなシステムには、zoneinfoデータベースがあります。このzoneinfoデータベースは、mysql_tzinfo_to_sql
を使用してMariaDBのタイムゾーンテーブルにロードできます。 ユーティリティ。
システムにzoneinfoデータベースが含まれている場合は、この方法を使用してタイムゾーンテーブルにデータを入力することをお勧めします。そうしないと、MariaDBとシステム上の他のアプリケーションとの間で日時の処理に違いが生じる可能性があります。
タイムゾーンテーブルを読み込むには、ターミナルウィンドウを開き、次のコマンドを実行します。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
root
のパスワードを入力します ユーザー。 「アクセスが拒否されました」というエラーが発生した場合は、この修正を参照してください。
それでおしまい。これで、タイムゾーンテーブルにデータが入力されます。
私の場合、警告が1つあります:
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
この警告は無視しても問題ありません。
この警告は、Unixライクなシステムにうるう秒が含まれていないことが原因である可能性があります。つまり、Unixライクなシステムには、うるう秒を23:59:60
の形式で表す方法がありません。 。代わりに、同じ秒を2回使用します。
これは、POSIX(Portable Operating System Interface)標準に準拠しており、報告された時間からうるう秒を省略する必要があります。
Windows、HP-UXシステム
WindowsやHP-UXなどの一部のシステムにはzoneinfoデータベースがないため、これらのオペレーティングシステムを使用している場合は、SQLスクリプトを介してタイムゾーンテーブルを読み込む必要があります。
スクリプトとインストール手順については、MySQLのドキュメントを参照してください。
タイムゾーンテーブルを確認する
タイムゾーンテーブルにデータが入力されたら、クイッククエリを実行して、実際にデータが入力されていることを確認できます。
例:
SELECT *
FROM mysql.time_zone_name
LIMIT 10;
結果:
+--------------------+--------------+ | 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 | +--------------------+--------------+
この場合、time_zone_name
から上位10件の結果を選択しました テーブル。
完全なカウントは次のとおりです:
SELECT COUNT(*)
FROM mysql.time_zone_name;
結果:
+----------+ | COUNT(*) | +----------+ | 594 | +----------+
必要に応じて、他のテーブルを実行できます。