Estou criando um banco de dados para registros que se estendem antes de 1000 AD, mas os campos MySQL Date e DateTime suportam apenas datas a partir de 1000.
Existe uma maneira que seria mais conveniente do que usar um tipo bigint para contar segundos antes/depois de 1/1/1970 usando um timestamp Unix ou mudar para um software de banco de dados que suporte intervalos de datas maiores?
Nenhum tipo de dados de data RDBMS nativo servirá para aplicativos que requerem datas muito antigas (e para alguns, até um futuro distante).
Se eu fosse você, usaria um tipo de string para o armazenamento nativo e ficaria com um formato significativo de lugar como: +AAAA-MM-DD para acomodar BC/AD e qualquer data futura histórica ou razoável previsível.
Se isso ajudar, você pode criar uma classe de biblioteca que converta seu formato de armazenamento interno em um formato mais apresentável para a camada de interface do usuário. Você pode até incluir funções de biblioteca que convertem em um tipo de data nativo, se o idioma de sua escolha suportar as datas que você terá em seu banco de dados.
Uma alternativa é armazenar cada parte da data em um campo numérico. Então você teria três campos:
Dessa forma, ainda seria legível por humanos. A faixa de valores para diferentes tipos de dados numéricos no MySQL está disponível em Overview of Numeric Types . Os requisitos de armazenamento estão disponíveis em Requisitos de armazenamento de tipo de dados .
Que tal ter um único campo flutuante na tabela onde armazenamos datas em formato numérico para, por exemplo, 2015-10-12 10:12:05 será armazenado 20151012. 101205. É sempre melhor classificar em um único campo em vez de ter 3 ou mais campos diferentes.
A lógica acima não funciona para alguns cenários. Então, convertemos data em segundos considerando 1 dia = 86400 segundos. Usado negativo para datas BC. Funciona como esperado.