1台のサーバーで、実行すると、
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)
別のサーバー上で
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)
私はこれが役に立つかもしれないと思いました:
default-time-zone='+00:00'
どのような値に設定されているかを見るには
SELECT @@global.time_zone;
値を設定するには、次のいずれかを使用します。
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
( 'Europe/Helsinki'のような名前付きタイムゾーンを使用すると、タイムゾーンテーブルを適切に設定する必要があります。)
+02:00
はオフセットです。 Europe/Berlin
はタイムゾーン(2つのオフセットがあります)で、CEST
は特定のオフセットに対応するクロックタイムです。
SELECT @@session.time_zone;
設定するには、どちらかを使用します。
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
どちらもSYSTEMを返す可能性があります。つまり、my.cnfで設定されたタイムゾーンを使用します。
タイムゾーン名を機能させるには、タイムゾーン情報テーブルにデータを入力する必要があります。 http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html 。これらのテーブルを この答え に入れる方法についても述べました。
TIME
として取得するSELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
あなたのタイムゾーンが+2:00の場合、それは02:00:00を返します。
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
注:タイムゾーン を変更しても、保存されている日付時刻またはタイムスタンプ は変更されませんが、既存のタイムスタンプ列の日付時刻は異なります。
私はここでチートシートを作りました: MySQLはそのタイムゾーンをUTCに設定するべきですか?
現在のセッションに設定するには、次の操作を行います。
SET time_zone = timezonename;
MySQLまたはPHP用にタイムゾーンサーバを設定できる場合
覚えておいてください:
タイムゾーンシステムを変更します。 Ubuntuの例:
$ Sudo dpkg-reconfigure tzdata
サーバーを再起動するか、Apache 2とMySQLを再起動します。
/etc/init.d/mysql restart
MySQLサーバーでこれを実行してください。
SET GLOBAL time_zone = '+8:00';
+ 8:00があなたのタイムゾーンになります。
まだこの問題を抱えている人のために:
value="jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC"
私のために働きました。最後に?serverTimezone=UTC
を追加するだけです。
これは私のためにインドの場所のために働く:
SET GLOBAL time_zone = "Asia/Calcutta";
SET time_zone = "+05:30";
SET @@session.time_zone = "+05:30";
起動時にサーバーのデフォルトのタイムゾーンを指定できます。 http://dev.mysql.com/doc/refman/5.1/en/server-options.html および--default-time-zone=timezone
オプションを参照してください。グローバルタイムゾーンとセッションタイムゾーンをチェックすることができます。
SELECT @@global.time_zone, @@session.time_zone;
どちらか一方または両方をSET
ステートメントで設定します。&c;より多くの詳細については http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html を参照してください。
'Country/Zone'は時々動かないことを心に留めておいてください...この問題はOS、MySQLのバージョンおよびハードウェアに依存しません - 2003年のFreeBSD 4とSlackware Linux以来、今日に至るまで私はそれを満たしています。 MySQLはバージョン3から最新のソーストランクまで。それはODDですが、それは起こりますか。例えば:
root@Ubuntu# ls -la /usr/share/zoneinfo/US
total 8
drwxr-xr-x 2 root root 4096 Apr 10 2013 .
drwxr-xr-x 22 root root 4096 Apr 10 2013 ..
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Alaska -> ../SystemV/YST9YDT
lrwxrwxrwx 1 root root 21 Jul 8 22:33 Aleutian -> ../posix/America/Adak
lrwxrwxrwx 1 root root 15 Jul 8 22:33 Arizona -> ../SystemV/MST7
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Central -> ../SystemV/CST6CDT
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Eastern -> ../SystemV/EST5EDT
lrwxrwxrwx 1 root root 37 Jul 8 22:33 East-Indiana -> ../posix/America/Indiana/Indianapolis
lrwxrwxrwx 1 root root 19 Jul 8 22:33 Hawaii -> ../Pacific/Honolulu
lrwxrwxrwx 1 root root 24 Jul 8 22:33 Indiana-Starke -> ../posix/America/Knox_IN
lrwxrwxrwx 1 root root 24 Jul 8 22:33 Michigan -> ../posix/America/Detroit
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Mountain -> ../SystemV/MST7MDT
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Pacific -> ../SystemV/PST8PDT
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Pacific-New -> ../SystemV/PST8PDT
lrwxrwxrwx 1 root root 20 Jul 8 22:33 Samoa -> ../Pacific/Pago_Pago
root@Ubuntu#
そしてそのような文はうまくいくはずです。
SET time_zone='US/Eastern';
しかし、あなたはこの問題を抱えています:
エラーコード:1298。不明または誤ったタイムゾーン:「EUS/Eastern」
ゾーン情報ディレクトリのサブフォルダを見て、symlinkの実際のファイル名を確認してください。この場合はEST5EDTです。それから代わりにこのステートメントを試してください:
SET time_zone='EST5EDT';
そしてそれは想定通りに実際に機能しています! :)このトリックを覚えておいてください。 MySQLのマニュアルや公式文書に文書化されているのを見たことはありません。しかし、対応するドキュメントを読むことはやるべきことです: MySQL 5.5タイムゾーン公式ドキュメント - そしてそのようにタイムゾーンデータをあなたのサーバーにロードすることを忘れないでください(rootユーザーとして実行してください!):
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
トリックナンバーワン - それは正確にMySQLのrootユーザーの下で行わなければなりません。 MySQLデータベースへのフルアクセス権を持っているユーザーであっても失敗したり、機能しない結果を生み出すことがあります - 私は自分自身でグリッチを見ました。
PDOを使用している場合
$offset="+10:00";
$db->exec("SET time_zone='".$offset."';");
MySQLiを使用している場合
$db->MySQLi->query("SET time_zone='".$offset."';");
ここでオフセットをフォーマットすることについての詳細: https://www.sitepoint.com/synchronize-php-mysql-timezone-configuration/ /
もう1つの提案がある古代の質問:
最近OSのタイムゾーンを変更した場合は、経由:
unlink /etc/localtime
ln -s /etc/usr/share/zoneinfo/US/Eastern /etc/localtime
... MySQL(またはMariaDB)はdbサービスを再起動するまで気付かないでしょう:
service mysqld restart
(または)
service mariadb restart
標準タイムゾーンをMariaDBに設定するには、50-server.cnfファイルに移動する必要があります。
Sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
次に、mysqldセクションに次のエントリを入力できます。
default-time-zone='+01:00'
例:
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
### Default timezone ###
default-time-zone='+01:00'
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
変更は構成ファイルを介して行う必要があります。変更しない場合、MariaDBサーバーは再起動後にmysqlテーブルをリセットします!
MySql Workbench を使用している場合は、管理者ビューを開いて[詳細設定]タブを選択してこれを設定できます。一番上のセクションは "Localization"で、最初のチェックボックスは "default-time-zone"です。そのチェックボックスをオンにしてから希望のタイムゾーンを入力し、サーバーを再起動してください。
まず、time_zoneが何であるかを調べることができます
SHOW VARIABLES LIKE '%time_zone%';
出力は次のようになります
**Variable_name** **Value**
system_time_zone CDT
time_zone SYSTEM
次に、ESTのようなものではなく、CDTのようなタイムゾーンにいることを確認したい場合は、次のように言って、マシンが何時であるかを確認できます。
SELECT NOW();
これがあなたが望む時間ではない場合、あなたはそれを変更する必要があります...あなたがする必要があるのはSET time_zone = timezone_name
だけです。 Continent/City
形式の形式であることを確認してください。
ホスティングサービスを利用しているため共有サーバーを使用している場合は、php.iniファイルまたは.htaccessファイルの変更について これらの回答 を参照してください。
Windows(IIS)でGLOBAL time_zone = 'Europe/Helsinki'(または何でも)を設定できるようにするには、MySQL time_zone記述テーブルを最初に設定する必要があります。
これらをこのリンクからダウンロードしました https://dev.mysql.com/downloads/timezones.html
ダウンロードしたSQLクエリを実行した後、GLOBAL time_zoneを設定し、SELECT NOW()で発生した問題を解決できました。 BSTではなくGMTを返していました。