pokud chcete nastavit výchozí čas na, musíte se změnit na timestamp
ve vašem datovém typu,
datetime
bude zobrazovat uživatelský vstup tabulky...
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Jako DEFAULT CURRENT_TIMESTAMP
otázka je již zodpovězena, odpovím pouze na nesoulad v rozlišení velkých a malých písmen v názvech tabulek mezi windows a linuxem.
Ve Windows se v souborových systémech ve výchozím nastavení nerozlišují velká a malá písmena.
Ale na Linuxu a dalších *NIX, jako jsou operační systémy, jsou ve výchozím nastavení rozlišována velká a malá písmena.
Důvodem, proč zde dochází k nesouladu v chování, je souborový systém, protože každá tabulka je vytvořena jako samostatný soubor a souborový systém za vás rozlišuje malá a velká písmena.
MySQL má parametr, který toto chování přepíše:
Například na Unixu můžete mít dvě různé tabulky s názvem
my_table
aMY_TABLE
, ale v systému Windows jsou tato dvě jména považována za identická. Chcete-li se vyhnout problémům s přenosem dat způsobeným velkými písmeny v názvech databází nebo tabulek, máte dvě možnosti:
Použijte
lower_case_table_names=1
na všech systémech. Hlavní nevýhodou je, že když použijeteSHOW TABLES
neboSHOW DATABASES
, nevidíte jména v původních písmenech.Použijte
lower_case_table_names=0
na Unix alower_case_table_names=2
na Windows. Tím se zachová velikost písmen v názvech databází a tabulek. Nevýhodou je, že musíte zajistit, aby vaše příkazy vždy odkazovaly na názvy vaší databáze a tabulek se správnými písmeny ve Windows. Pokud přenesete své příkazy do Unixu, kde jsou velká písmena významná, nefungují, pokud jsou písmena nesprávná.
Výjimka: Pokud používáte tabulky InnoDB a snažíte se těmto problémům s přenosem dat vyhnout, měli byste nastavitlower_case_table_names=1
na všech platformách vynutit převod jmen na malá písmena.[...]
Abyste předešli problémům způsobeným takovými rozdíly,je nejlepší přijmout konzistentní konvenci, jako je vždy vytvářet databáze a tabulky a odkazovat na ně pomocí malých názvů . Tato konvence se doporučuje pro maximální přenositelnost a snadné použití.
Toto je výňatek z manuálu MySQL o rozlišování malých a velkých písmen v identifikátorech
DEFAULT CURRENT_TIMESTAMP
podpora pro DATETIME
(datatype) byl přidán do MySQL 5.6.
Ve verzi 5.5 a dřívějších verzích to platilo pouze pro TIMESTAMP
(datový typ).
Je možné použít BEFORE INSERT
spusťte v 5.5 pro přiřazení výchozí hodnoty sloupci.
DELIMITER $$
CREATE TRIGGER ...
BEFORE INSERT ON mytable
FOR EACH ROW
BEGIN
IF NEW.mycol IS NULL THEN
SET NEW.mycol = NOW();
END IF;
END$$
Rozlišování malých a velkých písmen (dotazů na hodnoty uložené ve sloupcích) je způsobeno collation
použitý pro sloupec. Porovnání končící na _ci
nerozlišují malá a velká písmena. Například latin1_swedish_ci
nerozlišuje malá a velká písmena, ale latin1_general_cs
rozlišuje velká a malá písmena.
Výstup z SHOW CREATE TABLE foo
zobrazí znakovou sadu a řazení pro sloupce typu znaků. Toto je specifikováno na úrovni jednotlivých sloupců. "Výchozí" zadaná na úrovni tabulky platí pro nové sloupce přidané do tabulky, pokud nová definice sloupce neurčuje znakovou sadu.
AKTUALIZACE
Kaii poukázal na to, že moje odpověď týkající se „rozlišování malých a velkých písmen“ se zabývá hodnotami uloženými ve sloupcích a tím, zda dotazy vrátí hodnotu ze sloupce obsahujícího hodnotu "New"
bude vráceno s predikátem jako "t.col = 'new'"
.
Viz odpověď Kaii ohledně identifikátorů (např. názvy tabulek) jsou ve Windows zpracovávány jinak (ve výchozím nastavení) než v Linuxu.