Inhaltsverzeichnis
Zeitstempel-Datenzugriff
Ausnahme durch Zeitstempeltyp
Zeitstempeltyp und Zeittypauswahl
Verwendungsvorschläge für Zeitstempeltypen
ALTER TABLE `student` CHANGE `entry_date` `temp_entry_date` timestamp NOT NULL default '0000-00-00 00:00:00';
Nach dem Login kopieren
" >
ALTER TABLE `student` CHANGE `entry_date` `temp_entry_date` timestamp NOT NULL default '0000-00-00 00:00:00';
Nach dem Login kopieren
Heim Datenbank MySQL-Tutorial So lösen Sie das Zeitstempel-2038-Problem von MySQL

So lösen Sie das Zeitstempel-2038-Problem von MySQL

Jun 02, 2023 am 10:13 AM
mysql timestamp

Der Zeitstempel bezieht sich auf die Gesamtzahl der Sekunden von 00:00:00 GMT am 1. Januar 1970 (08:00:00 am 1. Januar 1970 Pekinger Zeit) bis heute.
In der Produktionsumgebung werden verschiedene Versionen von MySQL bereitgestellt, darunter drei Hauptversionen von MySQL 5.5/5.6/5.7 und N-Nebenversionen. Aufgrund der schlechten Aufwärtskompatibilität von MySQL verhält sich dasselbe SQL in verschiedenen Versionen unterschiedlich, wie folgt Der Zeitstempel Der Datentyp wird unter verschiedenen Aspekten detailliert vorgestellt.

Zeitstempel-Datenzugriff

In den oben genannten drei Hauptversionen von MySQL reicht der Wertebereich des Standard-Zeitstempeltyps (Timestamp) von „1970-01-01 00:00:01“ UTC bis „2038-01 – 19 03:14:07 UTC, die Daten sind auf die zweite Ebene genau, daher wird in MySQL der 4-Byte-INT-Typ zum Speichern der Zeit verwendet Konvertieren Sie beim Stempeln von Daten zunächst die lokale Zeitzonenzeit in die UTC-Zeitzonenzeit, konvertieren Sie dann die UTC-Zeitzonenzeit in einen Millisekundenwert im INT-Format (mit der Funktion UNIX_TIMESTAMP) und speichern Sie ihn dann in der Datenbank.
2. Konvertieren Sie beim Lesen von Zeitstempeldaten zunächst den Millisekundenwert im INT-Format in die UTC-Zeitzonenzeit (mit der Funktion FROM_UNIXTIME), konvertieren Sie ihn dann in die lokale Zeitzonenzeit und geben Sie ihn schließlich an den Client zurück.

In MySQL 5.6.4 und späteren Versionen können Daten vom Typ Zeitstempel mit der höchsten Genauigkeit in Mikrosekunden (Millionstelsekunden) gespeichert werden. Der Wertebereich von N ist 0-6 . Der Standardwert ist 0. Wenn eine Genauigkeit im Millisekundenbereich erforderlich ist, stellen Sie ihn auf Timestamp(3) ein. Wenn eine Genauigkeit im Mikrosekundenbereich erforderlich ist, erhöhen Sie den Wert sein interner Speicherplatz, aber der Zeitstempeltyp bleibt unverändert. Der minimale und maximale Wertebereich von .

Zeitstempelfelddefinition

Die Zeitstempelfelddefinition betrifft hauptsächlich zwei Arten von Vorgängen:

  • Beim Einfügen eines Datensatzes enthält das Zeitstempelfeld DEFAULT CURRENT_TIMESTAMP. Wenn beim Einfügen eines Datensatzes keine spezifischen Zeitdaten angegeben werden, enthält das Zeitstempelfeld Beim Aktualisieren eines Datensatzes für die aktuelle Zeit

  • enthält das Zeitstempelfeld ON UPDATE CURRENT_TIMESTAMP. Wenn beim Aktualisieren des Datensatzes keine spezifischen Zeitdaten angegeben werden, wird der Zeitstempelfeldwert auf die aktuelle Zeit gesetzt

    PS1: CURRENT_TIMESTAMP bedeutet, die Funktion CURRENT_TIMESTAMP( ) zu verwenden, um die aktuelle Zeit zu erhalten, ähnlich der Funktion NOW()
Gemäß den beiden oben genannten Operationstypen kann die Zeitstempelspalte vier Kombinationsdefinitionen haben, ihre Bedeutung ist:

Wenn das Feld als Zeitstempel definiert ist, bedeutet dies, dass das Feld weder beim Einfügen noch beim Aktualisieren automatisch auf die aktuelle Zeit eingestellt ist.
  • Wenn ein Feld als Zeitstempel DEFAULT CURRENT_TIMESTAMP definiert ist, bedeutet dies, dass dem Feld nur die aktuelle Zeit zugewiesen wird, wenn es eingefügt wird und kein Wert angegeben wird, und dass es nicht geändert wird, wenn es aktualisiert wird und kein Wert angegeben wird.
  • Wenn ein Feld als Zeitstempel ON UPDATE CURRENT_TIMESTAMP definiert ist, bedeutet dies, dass dem Feld beim Einfügen der Wert „0000-00-00 00:00:00“ zugewiesen wird, ohne dass ein Wert angegeben ist, und auf die aktuelle Zeit aktualisiert wird wenn aktualisiert und kein Wert angegeben ist.
  • Wenn das Feld als Zeitstempel DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP definiert ist, bedeutet dies, dass das Feld beim Einfügen oder Aktualisieren keinen Wert angibt und ihm die aktuelle Zeit zugewiesen wird.
  • PS1: Es gibt Unterschiede zwischen der in MySQL ausgeführten Tabellenerstellungsanweisung und der endgültigen Tabellenerstellungsanweisung. Es wird empfohlen, SHOW CREATE TABLE TB_XXX zu verwenden, um die Tabellenerstellungsanweisung der erstellten Tabelle abzurufen.
Unterschiede bei der Verwendung von Zeitstempelfeldern in verschiedenen Versionen von MySQL

In MySQL 5.5 und früheren Versionen kann nur DEFUALT CURRENT_TIMESTAMP oder ON UPDATE CURRENT_TIMESTAMP für ein Zeitstempelfeld definiert werden, dies wurde jedoch in MySQL 5.6 und MySQL aufgehoben 5.7. Diese Einschränkung;
  • In der MySQL 5.6-Version ist der Standardwert des Parameters „explicit_defaults_for_timestamp“ 1, in der MySQL 5.7-Version ist der Standardwert des Parameters „explicit_defaults_for_timestamp“ 0; Der Zeitstempeltyp ist standardmäßig NICHT NULL. In der MySQL 5.6-Version ist der Zeitstempeltyp standardmäßig NULL.
  • Wenn c1-Zeitstempel in der Tabellenerstellungsanweisung festgelegt ist, entspricht
  • dem c1-Zeitstempel NICHT NULL in MySQL 5.5 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

  • Entspricht c1-Zeitstempel NULL DEFAULT NULL in MySQL 5.6;
  • Entspricht c1-Zeitstempel NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP in MySQL. 5 .7;
  • Bei c1-Zeitstempel-Standardeinstellung 0 wird in der Tabellenerstellungsanweisung verwendet,

Entspricht c1-Zeitstempel NICHT NULL STANDARD ‘0000-00-00 00:00:00’ in MySQL 5.5 00:00’;
  • entspricht c1-Zeitstempel NOT NULL DEFAULT „0000-00-00 00:00:00’;
  • in MySQL 5.7 Betroffen vom Standardwert des Parameters explizit_defaults_for_timestamp.
  • PS2: Wenn der Standardwert der Zeitstempelspalte „0000-00-00 00:00:00“ lautet, wird bei Verwendung des Standardwerts „nicht im Zeitstempel-Wertebereich“ keine Warnung generiert.

    Ausnahme durch Zeitstempeltyp

    Wenn der MySQL-Parameter time_zone=system ist, wird beim Abfragen des Zeitstempelfelds die Systemzeitzone für die Zeitzonenkonvertierung aufgerufen. Aufgrund des globalen Sperrproblems in der Systemzeit Zone, in Multi-Parallelitätsszenarien Der Zugriff auf eine große Datenmenge führt dazu, dass der Thread-Kontext häufig wechselt, die CPU-Auslastung in die Höhe schnellt, die Systemreaktion langsamer wird und angehaltene Animationen auftreten.

    Zeitstempeltyp und Zeittypauswahl

    In einigen „Datenbankanleitungen“ wird empfohlen, den Zeitstempeltyp anstelle des Datums-/Uhrzeitfelds zu verwenden Der Zeitstempeltyp verwendet 4 Bytes und das Datum/Uhrzeit-Feld verwendet 8 Bytes. Aufgrund der Verbesserung der Festplattenleistung und der Reduzierung der Speicherkosten führt die Verwendung des Zeitstempeltyps jedoch möglicherweise nicht zu einer großen Leistungsverbesserung von der Definition und dem Wertebereich des Zeitstempeltyps beeinflusst werden. Beschränken Sie die geschäftliche Nutzung und wirken Sie sich darauf aus.

    In MySQL 5.6.4 und späteren Versionen können Sie Daten vom Zeitstempeltyp (Zeitstempel) in Mikrosekunden mit der höchsten Genauigkeit konvertieren, und Sie können auch Daten vom Zeittyp (Datum/Uhrzeit) in Mikrosekunden mit der höchsten Genauigkeit konvertieren type (datetime) ) kann auch den gleichen Effekt wie der Zeitstempeltyp erzielen, z. B. die Definition des Felds als dt1 DATETIME(3) NOT NULL DEFAULT NOW(3) ON UPDATE NOW(3); Der Zugriffsbereich des Zeittyps (datetime) ist „1000-01-01 00:00:00.000000“ bis „9999-12-31 23:59:59.999999“, wodurch die Daten jedes Zeitraums besser gespeichert werden können.

    Verwendungsvorschläge für Zeitstempeltypen

    Wenn Sie sich nur für die letzte Aktualisierungszeit der Daten interessieren, wird empfohlen, die Zeitstempelspalte als TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE zu definieren CURRENT_TIMESTAMP;#🎜 🎜#

    Wenn Ihnen die Erstellungszeit und Aktualisierungszeit wichtig ist, wird empfohlen, die Aktualisierungszeit als Zeitstempelfeld festzulegen und die Erstellungszeit als DAETIME oder TIMESTAMP DEFAULT ‘0000-00-00 zu definieren 00:00:00’, Und geben Sie beim Einfügen von Datensätzen explizit die Erstellungszeit an. Es wird empfohlen, nur eine einzige Zeitstempelspalte in der Tabelle zu definieren und die Attribute DEFAULT und ON UPDATE explizit zu definieren. 🎜🎜#

    Obwohl Zeitstempelfelder in MySQL zugewiesen oder aktualisiert werden können, wird empfohlen, Zeitstempelspalten nur bei Bedarf explizit einzufügen und zu aktualisieren auf einen Wert außerhalb des Systems, z. B. Die Servereinstellung in China ist ’+8:00’; Es wird empfohlen, die MySQL-Offline-Testversion und die Online-Produktionsversion konsistent zu halten.

    Ähnlichkeiten und Unterschiede zwischen Zeitstempel und Datum/Uhrzeit

    Gleiche Punkte:

    kann automatisch aktualisiert und initialisiert werden, und Das Standardanzeigeformat ist das gleiche JJJJ-MM-TT HH:mm:ss

    Unterschied:

    • #🎜🎜 #Zeitstempel-Zeitbereich: „1970-01-01 00:00:01“ UTC bis „2038-01-19 03:14:07“ UTC, automatische Zeitzonenkonvertierung, tatsächliche Speicherung von Millisekunden, 4 Bytes Speicher# 🎜🎜##🎜 🎜#

      Der Zeitbereich von datetime: ‘1000-01-01 00:00:00’ bis ‘9999-12-31 23:59:59’, Zeit Zone wird nicht unterstützt, 8 Bytes Speicher

    Stellen Sie die automatische Aktualisierungszeit von Zeitstempel und Datum ein
    • Beim Aktualisieren eines Datenelements oder Einfügen eines Neue Daten ohne Zuweisen von Werten zu Datum und MyDatum Die beiden Felder Datum und MyDatum werden automatisch auf die aktuelle Uhrzeit 19 03:14:07 UTC eingestellt, da dies ein Problem von MySQL ist selbst, das heißt, der Zeitstempel hat eine Obergrenze. Wenn diese überschritten wird, wird natürlich ein Fehler gemeldet. Einige Screenshots sind wie folgt:

    • Lösung

    • timestamp Obwohl es eine Obergrenze gibt, wird der Zeitstempel gespeichert und nicht muss verwendet werden Um das Zeitzonenproblem zu berücksichtigen, wird empfohlen, den Zeitstempel in einen Ganzzahltyp zu ändern, um den Zeitstempel zu speichern und ihn dann im Programm zu konvertieren, wenn Sie sich mit Zeitzonenanforderungen befassen und die 2038-Einschränkung lösen müssen (Diese Lösung wurde nicht implementiert, sie ist nur ein Vorschlag, verwenden Sie sie mit Vorsicht!)
    Wenn Sie das Zeitzonenproblem nicht berücksichtigen müssen, ersetzen Sie einfach den Zeitstempel durch den Datenzeittyp, da der Wertebereich von datatime ist viel größer, siehe Bild oben;

    1. Ändern Sie den Namen des ursprünglichen Feldes neues Datenzeittypfeld (erstellen Sie eine neue Spalte, um die ursprüngliche zu ersetzen);

    CREATE TABLE `mytime` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `date` timestamp(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
      `mydate` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
    Nach dem Login kopieren

    Kopieren Sie die Daten der ursprünglichen Feldspalte in die neue Feldspalte; Originalspalte;

    ALTER TABLE `student` CHANGE `entry_date` `temp_entry_date` timestamp NOT NULL default '0000-00-00 00:00:00';
    Nach dem Login kopieren

    Die vollständige SQL lautet wie folgt: (Beachten Sie, dass der ursprüngliche Standardwert des Zeitstempels ebenfalls hinzugefügt werden muss)

    ALTER TABLE `student` ADD `entry_date` DATETIME NOT NULL default '0000-00-00 00:00:00';
    Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Zeitstempel-2038-Problem von MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MySQL: Die einfache Datenverwaltung für Anfänger MySQL: Die einfache Datenverwaltung für Anfänger Apr 09, 2025 am 12:07 AM

MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

Kann ich das Datenbankkennwort in Navicat abrufen? Kann ich das Datenbankkennwort in Navicat abrufen? Apr 08, 2025 pm 09:51 PM

Navicat selbst speichert das Datenbankkennwort nicht und kann das verschlüsselte Passwort nur abrufen. Lösung: 1. Überprüfen Sie den Passwort -Manager. 2. Überprüfen Sie Navicats "Messnot Password" -Funktion; 3.. Setzen Sie das Datenbankkennwort zurück; 4. Kontaktieren Sie den Datenbankadministrator.

So erstellen Sie Navicat Premium So erstellen Sie Navicat Premium Apr 09, 2025 am 07:09 AM

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

So kopieren Sie Tabellen in MySQL So kopieren Sie Tabellen in MySQL Apr 08, 2025 pm 07:24 PM

Durch das Kopieren einer Tabelle in MySQL müssen neue Tabellen erstellt, Daten eingefügt, Fremdschlüssel festgelegt, Indizes, Auslöser, gespeicherte Verfahren und Funktionen kopiert werden. Zu den spezifischen Schritten gehören: Erstellen einer neuen Tabelle mit derselben Struktur. Fügen Sie Daten aus der ursprünglichen Tabelle in eine neue Tabelle ein. Legen Sie die gleiche fremde Schlüsselbeschränkung fest (wenn die Originaltabelle eine hat). Erstellen Sie den gleichen Index. Erstellen Sie denselben Auslöser (wenn die ursprüngliche Tabelle eine hat). Erstellen Sie dieselbe gespeicherte Prozedur oder Funktion (wenn die ursprüngliche Tabelle verwendet wird).

Wie man MySQL sieht Wie man MySQL sieht Apr 08, 2025 pm 07:21 PM

Zeigen Sie die MySQL -Datenbank mit dem folgenden Befehl an: Verbindung zum Server: MySQL -U -Benutzername -P -Kennwort ausführen STEILE -Datenbanken; Befehl zum Abrufen aller vorhandenen Datenbanken auswählen Datenbank: Verwenden Sie den Datenbanknamen. Tabelle Ansicht: Tabellen anzeigen; Tabellenstruktur anzeigen: Beschreiben Sie den Tabellennamen; Daten anzeigen: Wählen Sie * aus Tabellenname;

Wie kann ich das Datenbankkennwort in Navicat für Mariadb anzeigen? Wie kann ich das Datenbankkennwort in Navicat für Mariadb anzeigen? Apr 08, 2025 pm 09:18 PM

Navicat für MariADB kann das Datenbankkennwort nicht direkt anzeigen, da das Passwort in verschlüsselter Form gespeichert ist. Um die Datenbanksicherheit zu gewährleisten, gibt es drei Möglichkeiten, Ihr Passwort zurückzusetzen: Setzen Sie Ihr Passwort über Navicat zurück und legen Sie ein komplexes Kennwort fest. Zeigen Sie die Konfigurationsdatei an (nicht empfohlen, ein hohes Risiko). Verwenden Sie Systembefehlsleitungs -Tools (nicht empfohlen, Sie müssen die Befehlszeilen -Tools beherrschen).

Wie kopieren und fügen Sie MySQL ein und fügen Sie sie ein Wie kopieren und fügen Sie MySQL ein und fügen Sie sie ein Apr 08, 2025 pm 07:18 PM

Kopieren und einfügen in MySQL die folgenden Schritte: Wählen Sie die Daten aus, kopieren Sie mit Strg C (Windows) oder CMD C (MAC). Klicken Sie mit der rechten Maustaste auf den Zielort, wählen Sie ein Einfügen oder verwenden Sie Strg V (Windows) oder CMD V (MAC). Die kopierten Daten werden in den Zielort eingefügt oder ersetzen vorhandene Daten (je nachdem, ob die Daten bereits am Zielort vorhanden sind).

So führen Sie SQL in Navicat aus So führen Sie SQL in Navicat aus Apr 08, 2025 pm 11:42 PM

Schritte zur Durchführung von SQL in Navicat: Verbindung zur Datenbank herstellen. Erstellen Sie ein SQL -Editorfenster. Schreiben Sie SQL -Abfragen oder Skripte. Klicken Sie auf die Schaltfläche Ausführen, um eine Abfrage oder ein Skript auszuführen. Zeigen Sie die Ergebnisse an (wenn die Abfrage ausgeführt wird).

See all articles