Estou tentando executar um script para modificar um banco de dados, esta consulta
ALTER TABLE cmContentVersion CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
dá esse erro
ERROR 1067 (42000) at line 68: Invalid default value for 'modifiedDateTime'
Warning (Code 1264): Out of range value for column 'modifiedDateTime' at row 1
Error (Code 1067): Invalid default value for 'modifiedDateTime'
a coluna modifiedDateTime
é definida como
`modifiedDateTime` datetime NOT NULL default '0000-00-00 00:00:00',
Pergunta: Existe um valor padrão " inválido0000-00-00 00:00:00
" válido que pode ser substituído ao usar utf8_general_ci. Ou devo dizer aos desenvolvedores para pararem de confiar em uma " data inválida " em seu código?
Isso parece mais um problema de modo SQL do que o conjunto de caracteres. O modo estrito (e mais especificamente NO_ZERO_DATE que faz parte do modo estrito) geralmente dispara esse erro se a tabela foi criada com uma data padrão zero antes de ativar o estrito.
O que usamos (para colunas de datas modificadas semelhantes) é '1970-01-01 00:00:01'.
e em uma nota ligeiramente relacionada, usamos timestamp para essas colunas (e para o tempo criado também). Ocupa metade do espaço de armazenamento e é de acesso mais rápido.