sql >> データベース >  >> RDS >> Mysql

MySQLタイムゾーン

    デフォルトでは(少なくともDebianベースのインストールでは)タイムゾーンデータはMySQLにロードされません。それらがロードされているかどうかをテストする場合は、実行してみてください:

    SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');
    

    DATETIMEを返す場合 (この場合、2012-06-07 08:00:00 )、タイムゾーンが読み込まれています。 NULLを返す場合 、そうではありません。ロードされていない場合、オフセットを使用した変換に制限されます(例:+10:00 または-6:00

    これは多くの場合正常に機能するはずですが、夏時間の心配がない場合など、名前付きのタイムゾーンを使用する方がよい場合もあります。次のコマンドを実行すると、システムからタイムゾーンデータが読み込まれます(Unixのみ。同等のWindowsコマンドが何であるかはわかりません):

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

    MySQLのタイムゾーンに継続的に依存する必要がある場合は、上記のコマンドをシステムのタイムゾーンが更新されるたびに実行する必要があります。 。毎週または毎月のcronジョブに追加するだけで、自動的に実行することもできます。

    次に、タイムゾーンのリストを表示するには、次の手順を実行します。

    USE mysql;
    SELECT * FROM `time_zone_name`;
    

    MySQLではタイムゾーン情報が約5MBを占めることに注意してください。タイムゾーン情報をアンロードしたい場合は、以下を実行してMySQLを再起動してください。

    TRUNCATE `time_zone` ;
    TRUNCATE `time_zone_leap_second` ;
    TRUNCATE `time_zone_name` ;
    TRUNCATE `time_zone_transition` ;
    TRUNCATE `time_zone_transition_type` ;
    

    DROPしないでください これらのテーブル または悪いことが起こります。

    編集:

    以下のユーザーコメントに基づいて、システムを更新するときにタイムゾーンを自動的に更新する場合は、最初に、パスワードの入力を求められずにrootがログインできるようにする必要があります。

    MySQL> =5.6.6

    次の[ソース を実行します ]:

    mysql_config_editor set --login-path=client --host=localhost --user=root --password
    

    MySQL <5.6.6

    ~/.my.cnfを作成します ファイル(まだ存在しない場合)を追加し、以下を追加します:

    [client]
    user=root
    password=yourMysqlRootPW
    

    次に、chmod 600 ~/.my.cnfを実行します 他の誰もそれを読めないようにするためです。

    更新スクリプト

    次のスクリプトをcrontabに追加して、1日1回実行します。

    #!/bin/bash
    # Find if there are any timezone files that have been modified in the last 24   
    # hours and do not have ".tab" in the name (since these are not timezone files) 
    if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
        echo "Updating MySQL timezone info"
        # Note, suppressing STDERR here because of the .tab files above
        # that cause warnings.
        mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
        echo "Done!\n"
    fi
    

    echoを削除します 出力が必要ない場合は行。

    注:これは(ほとんど)テストされていません。問題があればお知らせください。この回答を更新します。



    1. SQL Serverで依存関係を検索する:sql_expression_dependencies

    2. OracleとSQLサーバーを使用したページングと一般的なページング方法

    3. NULLまたはISNULLのIN句

    4. Postgresがインデックスを使用しないのはなぜですか?