GNU/Linux >> Linux Esercitazione >  >> Linux

Mysql datetime DEFAULT CURRENT_TIMESTAMP errore

se si desidera impostare l'ora predefinita, è necessario modificarla in timestamp nel tuo tipo di dati,

il datetime visualizzerà l'input dell'utente della tabella...

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

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


Come il DEFAULT CURRENT_TIMESTAMP la domanda ha già una risposta, risponderò solo alla mancata corrispondenza della distinzione tra maiuscole e minuscole nei nomi delle tabelle tra Windows e Linux.

Su Windows, i file system non fanno distinzione tra maiuscole e minuscole per impostazione predefinita.
Ma su Linux e altri sistemi operativi *NIX come i sistemi operativi, fanno distinzione tra maiuscole e minuscole per impostazione predefinita.

Il motivo per cui ottieni una discrepanza nel comportamento qui è il file system, poiché ogni tabella viene creata come un file separato e il filesystem gestisce la distinzione tra maiuscole e minuscole per te.

MySQL ha un parametro per sovrascrivere questo comportamento:

Ad esempio, su Unix, puoi avere due diverse tabelle denominate my_table e MY_TABLE , ma su Windows questi due nomi sono considerati identici. Per evitare problemi di trasferimento dei dati derivanti da lettere maiuscole di database o nomi di tabelle, hai due opzioni:

  • Usa lower_case_table_names=1 su tutti i sistemi. Lo svantaggio principale di questo è che quando usi SHOW TABLES o SHOW DATABASES , non vedi i nomi nella loro lettera maiuscola originale.

  • Usa lower_case_table_names=0 su Unix e lower_case_table_names=2 Su Windows. Ciò preserva le lettere maiuscole dei nomi dei database e delle tabelle. Lo svantaggio di ciò è che devi assicurarti che le tue istruzioni facciano sempre riferimento ai nomi dei database e delle tabelle con la lettera corretta su Windows. Se trasferisci le tue istruzioni su Unix, dove la lettera minuscola è significativa, non funzionano se la lettera minuscola è errata.

    Eccezione: Se stai usando le tabelle InnoDB e stai cercando di evitare questi problemi di trasferimento dei dati, dovresti impostare lower_case_table_names=1 su tutte le piattaforme per forzare la conversione dei nomi in lettere minuscole.

[...]
Per evitare problemi causati da tali differenze,è meglio adottare una convenzione coerente, come creare e fare sempre riferimento a database e tabelle utilizzando nomi minuscoli . Questa convenzione è consigliata per la massima portabilità e facilità d'uso.

Questo è un estratto dal manuale MySQL sulla distinzione tra maiuscole e minuscole degli identificatori


Il DEFAULT CURRENT_TIMESTAMP supporto per un DATETIME (tipo di dati) è stato aggiunto in MySQL 5.6.

Nelle versioni 5.5 e precedenti, questo si applicava solo a TIMESTAMP (tipo di dati) colonne.

È possibile utilizzare un BEFORE INSERT trigger in 5.5 per assegnare un valore predefinito a una colonna.

 DELIMITER $$

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

La distinzione tra maiuscole e minuscole (delle query rispetto ai valori archiviati nelle colonne) è dovuta al collation utilizzato per la colonna. Le regole di confronto terminano con _ci non fanno distinzione tra maiuscole e minuscole. Ad esempio latin1_swedish_ci non fa distinzione tra maiuscole e minuscole, ma latin1_general_cs fa distinzione tra maiuscole e minuscole.

L'output di SHOW CREATE TABLE foo mostrerà il set di caratteri e le regole di confronto per le colonne del tipo di carattere. Questo è specificato a livello di colonna. Il "predefinito" specificato a livello di tabella si applica alle nuove colonne aggiunte alla tabella quando la nuova definizione di colonna non specifica un set di caratteri.

AGGIORNA

Kaii ha sottolineato che la mia risposta relativa alla "sensibilità tra maiuscole e minuscole" riguarda i valori memorizzati all'interno delle colonne e se le query restituiranno un valore da una colonna contenente un valore di "New" verrà restituito con un predicato come "t.col = 'new'" .

Vedi la risposta di Kaii riguardo agli identificatori (ad es. i nomi delle tabelle) vengono gestiti in modo diverso (per impostazione predefinita) su Windows rispetto a Linux.


Linux
  1. Elimina tabelle in MySQL

  2. Troppi errori di connessione in MySQL

  3. La tabella degli errori MySQL "mysql.servers" non esiste

  4. Nozioni di base su PHP e MySQL:database e tabelle

  5. MySQL - ERRORE 1045 - Accesso negato

Come creare una tabella in MySQL

Come esportare una tabella da MySQL a CSV

Come ottimizzare le tabelle MySQL

Come eliminare una tabella in MySQL

403 Errore proibito

Nomi di tabelle MySQL con distinzione tra maiuscole e minuscole su Linux