時間は本当に存在するのでしょうか?時間は人間が考え出した概念に過ぎず、物事の変化を測る基準に過ぎないと考える人もいます。データベースの場合、時間はデータと密接に関係しています。 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要素ヘッダーにスラッシュを追加するための実装コード
以前、動的フォームを記述しているときに落とし穴に遭遇しました。インデックスの添え字をキーとして使用す...
この記事では、libudev ライブラリを使用して hidraw デバイスにアクセスします。 lib...
最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...
目次1. インラインスタイル2. インポート方法を使用する3.cssモジュールのエクスポート4. ス...
前回の記事では、webpack と react 環境を設定した後、ログイン インターフェースとその後...
目次1. 重複排除前後のデータの比較2. 使い方1. フィルターとマップを使用する2. 削減を使用す...
さらに興味深いコンテンツについては、https://github.com/abc-club/free...
ドライバーモジュールに渡すパラメータ名、タイプ、権限を宣言します。 module_param(変数名...
目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...
ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...
1. タイトルHTML では、<h1></h1> から <h6>...
1.html <div class="ログインボディ"> <...
MySQL テーブルのテーブル構造をすばやく変更する - 「MySQL 管理」から抜粋 ALTER ...
この記事の例は MySQL 5.0 以降で実行されます。ユーザー権限を付与するための MySQL コ...
以前は、このような使用シナリオを処理するために rand() で直接 order していましたが、効...