GNU/Linux >> LINUX-Kenntnisse >  >> Linux

MySQL datetime DEFAULT CURRENT_TIMESTAMP-Fehler

wenn Sie die Standardzeit auf einstellen möchten, müssen Sie auf timestamp ändern in Ihrem Datentyp,

die datetime wird die Benutzereingabe der Tabelle anzeigen...

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html


Als DEFAULT CURRENT_TIMESTAMP Frage ist bereits beantwortet, ich werde nur auf die Diskrepanz zwischen Groß- und Kleinschreibung in Tabellennamen zwischen Windows und Linux antworten.

Unter Windows wird bei Dateisystemen standardmäßig zwischen Groß- und Kleinschreibung unterschieden.
Aber unter Linux und anderen *NIX-ähnlichen Betriebssystemen wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden.

Der Grund, warum Sie hier eine Diskrepanz im Verhalten erhalten, ist das Dateisystem, da jede Tabelle als separate Datei erstellt wird und das Dateisystem die Groß- und Kleinschreibung für Sie behandelt.

MySQL hat einen Parameter, um dieses Verhalten zu überschreiben:

Unter Unix können Sie beispielsweise zwei verschiedene Tabellen mit dem Namen my_table haben und MY_TABLE , aber unter Windows werden diese beiden Namen als identisch angesehen. Um Datenübertragungsprobleme zu vermeiden, die durch die Schreibweise von Datenbank- oder Tabellennamen entstehen, haben Sie zwei Möglichkeiten:

  • Verwenden Sie lower_case_table_names=1 auf allen Systemen. Der Hauptnachteil dabei ist, dass Sie SHOW TABLES verwenden oder SHOW DATABASES , sehen Sie die Namen nicht in ihrer ursprünglichen Schreibweise.

  • Verwenden Sie lower_case_table_names=0 unter Unix und lower_case_table_names=2 unter Windows. Dadurch bleibt die Schreibweise von Datenbank- und Tabellennamen erhalten. Der Nachteil dabei ist, dass Sie sicherstellen müssen, dass Ihre Anweisungen unter Windows immer mit der richtigen Schreibweise auf Ihre Datenbank- und Tabellennamen verweisen. Wenn Sie Ihre Anweisungen nach Unix übertragen, wobei die Groß-/Kleinschreibung von Bedeutung ist, funktionieren sie nicht, wenn die Groß-/Kleinschreibung falsch ist.

    Ausnahme: Wenn Sie InnoDB-Tabellen verwenden und versuchen, diese Datenübertragungsprobleme zu vermeiden, sollten Sie lower_case_table_names=1 festlegen auf allen Plattformen, um die Umwandlung von Namen in Kleinbuchstaben zu erzwingen.

[...]
Um Probleme zu vermeiden, die durch solche Unterschiede verursacht werden, ist es am besten, eine konsistente Konvention zu übernehmen, z. B. Datenbanken und Tabellen immer mit Kleinbuchstaben zu erstellen und auf sie zu verweisen . Diese Konvention wird für maximale Portabilität und Benutzerfreundlichkeit empfohlen.

Dies ist ein Auszug aus dem MySQL-Handbuch zur Groß- und Kleinschreibung von Bezeichnern


Die DEFAULT CURRENT_TIMESTAMP Unterstützung für DATETIME (Datentyp) wurde in MySQL 5.6 hinzugefügt.

In 5.5 und früheren Versionen galt dies nur für TIMESTAMP (Datentyp) Spalten.

Es ist möglich, einen BEFORE INSERT zu verwenden Trigger in 5.5, um einer Spalte einen Standardwert zuzuweisen.

 DELIMITER $$

 CREATE TRIGGER ...
 BEFORE INSERT ON mytable
 FOR EACH ROW
 BEGIN
    IF NEW.mycol IS NULL THEN
       SET NEW.mycol = NOW();
    END IF;
 END$$

Groß-/Kleinschreibung (bei Abfragen für in Spalten gespeicherte Werte) liegt an collation für die Säule verwendet. Sortierungen, die auf _ci enden Groß-/Kleinschreibung wird nicht beachtet. Zum Beispiel latin1_swedish_ci Groß-/Kleinschreibung wird nicht beachtet, aber latin1_general_cs unterscheidet zwischen Groß- und Kleinschreibung.

Die Ausgabe von SHOW CREATE TABLE foo zeigt den Zeichensatz und die Sortierung für die Zeichentypspalten an. Dies wird pro Spalte angegeben. Der auf Tabellenebene angegebene "Standard" gilt für neue Spalten, die der Tabelle hinzugefügt werden, wenn die neue Spaltendefinition keinen Zeichensatz angibt.

AKTUALISIEREN

Kaii wies darauf hin, dass sich meine Antwort zur „Groß-/Kleinschreibung“ auf Werte bezieht, die in Spalten gespeichert sind, und ob Abfragen einen Wert aus einer Spalte zurückgeben, die einen Wert von "New" enthält wird mit einem Prädikat wie "t.col = 'new'" zurückgegeben .

Siehe Kaiis Antwort zu Identifikatoren (z. B. Tabellennamen) unter Windows (standardmäßig) anders gehandhabt als unter Linux.


Linux
  1. MySQL – Konvertieren in Tabellendaten für InnoDB

  2. Beheben des MySQL-Fehlers:Zu viele offene Dateien

  3. Fehler bei der Verwendung von GRANT mit IDENTIFIED by password in MySQL

  4. PHP- und MySQL-Grundlagen:Datenbanken und Tabellen

  5. Mysql-Datenbank wiederherstellen - mysql/mysqldump ergibt Tabelle <Datenbank>. <Tabellenname> existiert nicht (1146)

So erstellen Sie eine Tabelle in MySQL

So exportieren Sie eine Tabelle von MySQL nach CSV

So optimieren Sie MySQL-Tabellen

So löschen Sie eine Tabelle in MySQL

403 Verbotener Fehler

MySQL-Groß-/Kleinschreibung bei Tabellennamen unter Linux