Eu tenho duas colunas nos usuários da tabela, registerDate and lastVisitDate
que consistem no tipo de dados datetime. Eu gostaria de fazer o seguinte.
- Defina o valor padrão do registerDate como MySQL NOW ()
- Defina o valor padrão lastVisitDate como
0000-00-00 00:00:00
Em vez de nulo, que ele usa por padrão.
Como a tabela já existe e possui registros, eu gostaria de usar a tabela Modify. Eu tentei usar os dois trechos de código abaixo, mas nenhum deles funciona.
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;
Isso me dá erro: ERROR 1067 (42000): Invalid default value for 'registerDate'
É possível definir o valor padrão de data e hora como NOW () no MySQL?
mysql
sql
datetime
mysql-error-1067
Ibrahim Azhar Armar
fonte
fonte
ALTER TABLE users MODIFY dateTime timestamp default CURRENT_TIMESTAMP
. Você não definiu odata type
de campo, tanto de seus esforçosDATE
deve funcionar com o valor padrãoNOW()
Respostas:
No MySQL 5.6.5, você pode usar o
DATETIME
tipo com um valor padrão dinâmico:Ou mesmo combine as duas regras:
Referência:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available .html
Antes da 5.6.5, você precisa usar o
TIMESTAMP
tipo de dados, que é atualizado automaticamente sempre que o registro é modificado. Infelizmente, no entanto, apenas umTIMESTAMP
campo de atualização automática pode existir por tabela.Consulte: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
Se você deseja impedir que o MySQL atualize o valor do registro de data e hora
UPDATE
(para que seja ativado apenasINSERT
), você pode alterar a definição para:fonte
DATETIME
é preferível @Johan fazer o intervalo que pode conter: '1000-01-01 00:00:00' a '9999-12-31 23:59:59' em comparação comTIMESTAMPS
's' 1970-01-01 00: 00:01 'UTC para' 2038-01-19 03:14:07 'UTC. Para fins de armazenamento de datas de nascimento, ou algo mais de 30 anos no futuro, por exemplo.timestamp
esse comportamento a partir do MySQL 5.6Eu uso um gatilho como solução alternativa para definir um campo de data e hora como NOW () para novas inserções:
deve funcionar para atualizações também
As respostas de Johan e Leonardo envolvem a conversão em um campo de carimbo de data / hora. Embora isso provavelmente esteja correto para o caso de uso apresentado na pergunta (armazenando RegisterDate e LastVisitDate), não é uma solução universal. Consulte a pergunta data / hora versus carimbo de data / hora .
fonte
use a timestamp
é uma solução tola se você realmente aprender a diferença entre esses dois tipos de dados.Minha solução
fonte
TIMESTAMP
coluna. Ninguém estava pedindoTIMESTAMP
...EUREKA !!!
Para todos aqueles que perderam o coração tentando definir um valor DATETIME padrão no MySQL , eu sei exatamente como você se sente / sentiu. Então aqui está:
Observe com cuidado que eu não adicionei aspas simples / aspas duplas ao redor do 0 .
Atualização importante :
Esta resposta foi postada há muito tempo. Naquela época, funcionava na minha (provavelmente mais recente) instalação do MySQL e tive vontade de compartilhá-lo. Por favor, leia os comentários abaixo antes de decidir usar esta solução agora.
fonte
Os documentos do mysql 5.6 dizem que CURRENT_TIMESTAMP pode ser usado como padrão para os tipos de dados TIMESTAMP e DATETIME:
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
fonte
Nas versões mysql 5.6.5 e mais recentes, você pode usar datas precisas e definir valores padrão também. Há um pouco sutil, porém, que é passar o valor de precisão para a chamada de função datetime e NOW ().
Este exemplo funciona:
Este exemplo não funciona:
fonte
Pode ser usado para atualizar o carimbo de data / hora na atualização.
fonte
A melhor maneira é usar "PADRÃO 0". Outro jeito:
fonte
Isso funcionou para mim, usando o MySQL:
fonte
Finalmente, isso funcionou para mim!
fonte
fonte
Não tenho certeza se isso ainda está ativo, mas aqui vai.
Em relação à configuração dos padrões para Now (), não vejo isso possível para o tipo de dados DATETIME. Se você deseja usar esse tipo de dados, defina a data em que você executa a inserção da seguinte maneira:
Minha versão do mySQL é 5.5
fonte
INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', NOW())
Isso funcionou para mim - apenas alterei INSERT para UPDATE para minha mesa.
fonte