2015-12-22 15 views
6

trzeba utworzyć tabelę mysql z domyślnej wartości w kolumnie CURRENT_DATE()Jak utworzyć tabelę mysql z domyślnym znacznikiem czasu kolumny current_date?

staram

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; 

ale to jest pisanie błąd

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 

czym polega problem?

muszę unikalnych tylko data nie z informacją pełnym wymiarze czasu ...

możesz mi pomóc?

+0

Jest to domyślne zachowanie w kolumnie 'TIMESTAMP'. W tym przypadku nie musisz podawać "DEFAULT". – eggyal

+0

TIMESTAMP i DATE nie mają tego samego formatu, datownik jest liczbą, podczas gdy data jest sformatowaną datą. Wybierz jedną lub drugą. – Anton

+0

Dlaczego nie spróbujesz ''date' DATE NOT NULL DEFAULT CURRENT_DATE()' jeśli potrzebujesz tylko roku, miesiąca i dnia. –

Odpowiedz

14

Zastosowanie CURRENT_TIMESTAMP funkcja zamiast CURRENT_DATE() funkcja

Spróbuj tego:

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 ustawia informacje w pełnym wymiarze czasu z godzinami, minutami i sekundami. Potrzebuję tylko roku, miesiąca i dnia. –

+0

Jedną opcją jest ustawienie go jako znacznika czasu, jak pokazano, ale kiedy faktycznie pobierzesz dane, po prostu rzuć je jako datę, która skróci godziny, minuty i sekundy.'WYBIERZ DATĘ (' date') 'zwróci ją w pożądanym formacie, zachowując jednocześnie pożądane zachowanie dla kolumny. – Redbeard011010

+0

Rozumiem, ale potrzebuję unikalnego adresu IP z rokiem, miesiącem i datą , więc jeśli unikam go jako znacznika czasu po 2-3 sekundach temu wstawi ponownie nowy wiersz ... Potrzebuję unikalnego bo po odświeżeniu, jeśli IP jest istnieje dzisiaj nie wolno pisać w tabeli , dlatego potrzebuję tylko formatu daty –

0

po prostu trzeba wymienić CURRENT_DATE() przy NOW() w zapytaniu. Wypróbowałem i wygląda dobrze.

+0

TERAZ() będzie traktowany jako 'CURRENT_TIMESTMAP' w mysql –

0

Może to być trochę za późno, ale myślę, że może być pomocne dla kogoś innego.

Moje podejście było użyć getdate() tak:

[timestamp] [datetime] NOT NULL CONSTRAINT [DF_myTable_TimeStamp] DEFAULT (getdate()).

Gdzie [TimeStamp] jest kolumną, o której mowa.

Powoduje to na przykład: 02.11.2017 11: 58: 34,203

Do tego przycinania, używać następujące

DEKLARUJĄ @mydate datetime

zestaw @ mydate = '2017-11-02 11: 58: 34.203'

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

Ten wynik końcowy jest: 2017-11-02 11:58:34

You can actually set this in MSSQL Management Studio

Powiązane problemy