2015-12-22 25 views
6

Ho bisogno di creare tabella MySQL con il valore di default sulla colonna CURRENT_DATE()Come creare la tabella mysql con la data/ora della colonna default_date?

provo

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_DATE(), 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

ma è scrittura di un errore

Query: CREATE TABLE `visitors` (`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `ip` VARCHAR(32) NOT NULL, `browser` VARCHAR(500) NO... 

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE() NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1' at line 7 

Execution Time : 0 sec 
Transfer Time : 0 sec 
Total Time  : 0.063 sec 

qual è il problema?

ho bisogno di uniques unica data non con informazioni a tempo pieno ...

mi potete aiutare?

+0

Questo è il comportamento predefinito di una colonna 'TIMESTAMP'. In questo caso non è necessario specificare 'DEFAULT '. – eggyal

+0

TIMESTAMP e DATE non hanno lo stesso formato, Timestamp è un numero mentre la data è una data formattata. Scegli uno o l'altro. – Anton

+0

Perché non provate con ''date' DATE NOT NULL DEFAULT CURRENT_DATE()' se avete solo bisogno di anno, mese e giorno. –

risposta

14

Usa CURRENT_TIMESTAMP funzione invece di CURRENT_DATE() funzione

Prova questo:

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 
+0

no CURRENT_TIMESTAMP sta impostando informazioni a tempo pieno anche con ore, minuti e secondi. Ho bisogno solo di anno, mese e giorno –

+0

Un'opzione è configurarla come un timestamp, come mostrato, ma quando si recuperano effettivamente i dati, basta lanciarli come una data, che troncerà le ore, i minuti ei secondi.'SELEZIONA DATA (' date') 'lo restituirà nel formato che desideri, pur mantenendo il comportamento desiderato per la colonna. – Redbeard011010

+0

Capisco ma ho bisogno di IP univoco con anno, mese e data quindi se l'ho univoco come timestamp dopo 2-3 secondi fa si inserirà ancora una nuova riga ... Ho bisogno di univoco perché dopo l'aggiornamento se IP è esiste oggi non deve scrivere nella tabella quindi perché ho bisogno solo del formato di data –

0

devi solo sostituire CURRENT_DATE() da NOW() nella query. L'ho provato e sembra ok.

+0

NOW() sarà considerato come 'CURRENT_TIMESTMAP' in mysql –

0

Questo potrebbe essere un po 'in ritardo, ma penso che potrebbe essere utile a qualcun altro.

Il mio approccio è stato quello di utilizzare getdate() in questo modo:

[timestamp] [datetime] NOT NULL VINCOLO [DF_myTable_TimeStamp] DEFAULT (GETDATE()).

Dove [TimeStamp] è la colonna in questione.

Il risultato è per esempio: 2017/11/02 11: 58: 34,203

Per tagliare questo, uso la seguente

dichiarare @mydate datetime

set @ MyDate = '2017/11/02 11: 58: 34,203'

SELEZIONA try_convert (nvarchar (20), @mydate, 120)

012.351.641,061 mila

Questo risultato finale è: 2017-11-02 11:58:34

You can actually set this in MSSQL Management Studio