Quando creo una tabella con una colonna timestamp, quella colonna è magicamente definita come NOT NULL DEFAULT CURRENT_TIMESTAMP sull'aggiornamento CURRENT_TIMESTAMP. Ignorando quanto sia strano, mi piacerebbe cambiarlo in modo da non avere impostazioni predefinite e nessun comportamento speciale "in aggiornamento".È possibile definire una colonna timestamp che non sia nullo e che non abbia impostazioni predefinite e nessun comportamento speciale in fase di aggiornamento?
Ho scoperto che se cambio la colonna in NULL, l'impostazione predefinita è magicamente impostata su NULL e "on update" scompare magicamente. Questo è fantastico, tuttavia vorrei che la colonna fosse NOT NULL. Quando lo cambio, sia il default che "on update" (impostato su CURRENT_TIMESTAMP) riappaiono magicamente.
So che potrei usare datetime anziché timestamp, ma sono interessato a timestamp perché è timezone-aware (sembra essere come "timestamp con fuso orario" in Postgres).
Hmm, interessante. Sono stato in grado di farlo: 'alter table tstest modify ts timestamp non null default 0;' e successivamente: 'alter table tstest alter column ts drop default;' Sembra dare i risultati che volevo. Mi chiedo se ci sia un modo più diretto, idealmente nella dichiarazione della tabella di creazione. – aditsu
Quindi per ora posso farlo in 2 passaggi: creare tabella (con 0 predefinito) e quindi rilasciare il valore predefinito. Ma la cosa strana è che se provo a inserire un valore nullo, usa ancora il timestamp corrente (e se non specifichi un valore, usa 0). mysql, non hai senso? – aditsu
Sembra essere un caso speciale. Vedi [qui] (http://dev.mysql.com/doc/refman/5.1/en/timestamp-initialization.html): _Per impostazione predefinita, le colonne TIMESTAMP NON sono NULL, non possono contenere valori NULL e l'assegnazione di NULL assegna l'attuale timestamp._ – Ilion