Anteriormente, na minha tabela (~ 81.000 linhas), eu tinha date
e os time
campos definidos como VARCHAR
em vez de date/time
. Todas essas datas eram do tipo MM/DD/YY
. Mudei o tipo de VARCHAR
para DATE
e TIME
respectivamente e a maioria das minhas datas, que tinham DD >= 13
para 0000-00-00 .
Agora, fico com um backup que fiz 3 meses atrás (~ 77400 linhas) e depois os mais novos. Existe alguma maneira de restaurar as datas mais antigas?
A meu ver, terei que tentar atualizar as datas usando o .SQL
arquivo mais antigo para essas 77400 linhas e depois disso terei que escrever um script para verificar e incrementar a data a cada período de 24 horas que passa na TIME
coluna.
Não fiz backup após 12 de abril e não considerei fazer um enquanto alterava o banco de dados. :(
EDITAR
mysql Ver 14.14 Distrib 5.1.61, para debian-linux-gnu (i486) usando readline 6.1
CREATE TABLE `latest` (
`msg` VARCHAR(280) NOT NULL,
`id` VARCHAR(20) NOT NULL,
`ctg` VARCHAR(10) NOT NULL,
`date` VARCHAR(50) NOT NULL COMMENT 'date_format( %m/%d/%y )',
`time` VARCHAR(50) NOT NULL COMMENT 'date_format( %H:%i:%s )',
`fid` BIGINT(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fid`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DEFAULT AUTO_INCREMENT=80685
Eu mudei o código da tabela para isso:
CREATE TABLE `latest` (
`msg` VARCHAR(280) NOT NULL,
`id` VARCHAR(20) NOT NULL,
`ctg` VARCHAR(10) NOT NULL,
`date` DATE NOT NULL COMMENT 'date_format( %m/%d/%y )',
`time` TIME NOT NULL COMMENT 'date_format( %H:%i:%s )',
`fid` BIGINT(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fid`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DEFAULT AUTO_INCREMENT=80685
Bem, geralmente eu uso a seguinte abordagem: em vez de alterar um tipo de coluna ativa (se não for algo realmente trivial), adiciono outra coluna de um novo tipo, defino todos os valores nela (mais sobre isso abaixo) e excluo a coluna antiga depois de fazer tudo isso (e verificar se tudo funciona bem), usando seu nome como um nome para uma nova coluna.
Talvez essa abordagem ainda possa ser usada. Para converter valores antigos, use algo assim:
Observe que o formato literal real pode ser diferente no seu caso; consulte o manual e teste -o para obter algum valor exato para ter certeza.
Não é possível restaurar as datas mais antigas. Se você alterar o tipo de um campo no SQL, o servidor (mySQL?) tenta encontrar o valor correto sozinho. se isso falhar, ele inserirá o valor padrão. Os valores mais antigos são perdidos.
A solução seria escrever um script (PHP?) que analisará todos os seus dados e os salvará corretamente no banco de dados.
A função strtotime e date do PHP pode te ajudar muito. http://de.php.net/manual/de/function.strtotime.php & http://php.net/manual/de/function.date.php
Por exemplo: