時間は本当に存在するのでしょうか?時間は人間が考え出した概念に過ぎず、物事の変化を測る基準に過ぎないと考える人もいます。データベースの場合、時間はデータと密接に関係しています。 MySQL の時間の渦に突入します。 1. 時間型フィールドMySQL 時間型フィールド: 見落としがちなのは以下の点です: TIMESTAMP は次のようにデータを保存します。 MySQL は、TIMESTAMP 値を現在のタイムゾーンから UTC に変換して保存し、UTC から現在のタイムゾーンに変換して取得します。 TIMESTAMP と SQL_MODE の組み合わせ sql_mode はタイムスタンプ値にも影響します。 mysql> テーブル ts を作成します ( id INTEGER NOT NULL AUTO_INCREMENT 主キー、 列 TIMESTAMP が NULL でない ) AUTO_INCREMENT = 1; mysql> '%sql_mode%' のような変数を表示します。 +---------------+---------------------+ | 変数名 | 値 | +---------------+---------------------+ | sql_mode | STRICT_TRANS_TABLES | +---------------+---------------------+ mysql> INSERT INTO ts (col) VALUES ('1969-01-01 01:01:10'); エラー 1292 (22007): 行 1 の列 'col' の日付時刻値が正しくありません: '1969-01-01 01:01:10' mysql> sql_mode を ="" に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> '%sql_mode%' のような変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | SQL モード | | +---------------+-------+ mysql> INSERT INTO ts (col) VALUES ('1969-01-01 01:01:10'),('2999-01-01 01:01:10'); クエリは正常、2 行が影響を受け、2 つの警告 (0.01 秒) 記録: 2 重複: 0 警告: 2 mysql> 警告を表示します。 +---------+------+----------------------------------------------+ | レベル | コード | メッセージ | +---------+------+----------------------------------------------+ | 警告 | 1264 | 行 1 の列 'col' の値が範囲外です | | 警告 | 1264 | 行 2 の列 'col' の値が範囲外です | +---------+------+----------------------------------------------+ mysql> TS から * を選択; +----+---------------------+ | id | 列 | +----+---------------------+ | 1 | 0000-00-00 00:00:00 | | 2 | 0000-00-00 00:00:00 | +----+---------------------+ セット内の 2 行 (0.00 秒) sql_modeを制御することで、タイムスタンプ制限を超えた値は挿入されるものの、空白を0で埋める方式が採用されています。 2.explicit_defaults_for_timestamp 時間処理メカニズムデフォルトでは有効になっています。 MySQL 8.0.22 以降では、TIMESTAMP NOT NULL として宣言された列に NULL を挿入しようとすると、エラーが発生して拒否されます。 1.explicit_defaults_for_timestampが無効になっている場合:
2.explicit_defaults_for_timestampが有効になっている:
テスト: テーブル `test1` を作成します ( id bigint not null AUTO_INCREMENT COMMENT '主キーID', name varchar(20) COMMENT '主キーID', create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'cr time', 主キー(id) )ENGINE=InnoDB AUTO_INCREMENT=1 ; 'explicit_defaults_for_timestamp' のような変数を表示します。 グローバルexplicit_defaults_for_timestampをONに設定します。 グローバルexplicit_defaults_for_timestampをOFFに設定します。 test1(id,name,create_time) に挿入 VALUES(1,'Kit',NULL); 3.mysqlシステム構成システム関連のイベントパラメータには次の 3 つが含まれます。 mysql>Variable_name like '%time_zone%' または Variable_name like 'log_timestamp%' のグローバル変数を表示します。 +------------------+--------+ | 変数名 | 値 | +------------------+--------+ | システムタイムゾーン | CST | | タイムゾーン | システム | | ログタイムスタンプ | UTC | +------------------+--------+ セット内の 3 行 (0.00 秒) 1. システム タイム ゾーン: サーバーが起動すると、ホストのタイム ゾーンを自動的に判別し、それを使用して system_time_zone システム変数を設定します。それ以降は値は変わりません。 2.time_zone: 完全な time_zone は、サーバーが現在実行されているタイムゾーンを示します。初期の time_zone 値は「SYSTEM」です。これは、サーバーのタイムゾーンがシステムのタイムゾーンと同じであることを意味します。
注: MySQL では、タイムゾーンを MySQL システム ライブラリにインポートする方法も提供されています。 mysql_tzinfo_to_sql プログラムを使用して、/usr/share/zoneinfom にタイムゾーン情報を読み込みます。 mysql> mysql.time_zone_nameからCOUNT(*)を選択します。 +----------+ | カウント(*) | +----------+ | 0 | +----------+ ##タイムゾーン値をインポートするためのmysql_tzinfo_to_sqlツール シェル>mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql mysql> mysql.time_zone_nameからCOUNT(*)を選択します。 +----------+ | カウント(*) | +----------+ | 1780 | +----------+ 3. ログタイムスタンプ この変数は、エラー ログに書き込まれるメッセージ、およびファイルに書き込まれる一般クエリ ログとスロー クエリ ログ メッセージのタイムスタンプのタイム ゾーンを制御します。 一般クエリ ログ テーブルとスロー クエリ ログ テーブル (mysql.general_log と mysql.slow_log) が書き込まれるタイム ゾーンには影響しません。 許可される log_timestamps 値は UTC (デフォルト) と SYSTEM (ローカル システム タイム ゾーン) です。 注: UTC は通常、協定世界時を指します。協定世界時(世界統一時刻、世界標準時刻、国際協定時刻とも呼ばれる)は、UTC + 8時間 = 中国時間です。 もちろん、より適切に管理するには、この値はシステムの記録時間と一致する必要があります。 #タイムゾーンを設定し、東 8 番目のゾーンに変更します SET GLOBAL time_zone = '+8:00'; 提案: mysql 設定ファイル my.cnf [mysqld] log_timestamps=システム デフォルトのタイムゾーン = '+8:00' mysql>Variable_name like '%time_zone%' または Variable_name like 'log_timestamp%' のグローバル変数を表示します。 +------------------+--------+ | 変数名 | 値 | +------------------+--------+ | ログタイムスタンプ | システム | | システムタイムゾーン | CST | | タイムゾーン | +08:00 | +------------------+--------+ 要約する時間タイプ、パラメータ、システム タイム ゾーンから、MySQL で時間を設定し、使用する方法を学習します。 特に、特別な要件がない限り、sql_mode を安易に変更しないでください。 MySQL の時間設定の注意事項については以上です。MySQL の時間設定の注意事項について詳しくは、123WORDPRESS.COM の過去記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策
>>: Vue要素ヘッダーにスラッシュを追加するための実装コード
目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...
目次序文プロミスチェーンMDN エラー連鎖デフォルト処理略語非同期待機序文この記事を書いた理由は、ユ...
序文MySQL と Oracle のキーワードはまったく同じではありません。Oracle データベー...
効果: <!doctypehtml> <html> <ヘッド> ...
タイトルで提起された問題は、段階的に分解して解決することができます。 MySQL では KEY と ...
これを応用することで、ウェブサイトの一部の公開領域を独立したページにすることができ、その後、この技術...
MySQL の仕様によっては、テーブル作成仕様にすべてのフィールドが空であってはならないという要件を...
今日はたまたま友人のサーバーの移転を手伝うことになり、サーバーの基本的な設備の設定を行ったのですが、...
オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...
目次ドヴァdvaの使用DVAの実装非同期をサポートルーターの実装成し遂げる:ドヴァdva は、red...
1. 問題開発中に、他のデータベースから MySQL データベース テーブルにデータを挿入すると、次...
イベントでは、SQL コードを 1 回または一定の間隔で実行することを指定できます。通常、複雑な S...
今日、私の同僚が MYSQL クエリ ステートメントの作成時に非常に奇妙な問題に遭遇しました。MyS...
技術的背景Latex は文書作成、特に記事作成には欠かせないツールであり、必須のテキスト組版ツールで...
目次1. 補助機能2. 例1. mapState と mapGetters 2. mapMutati...