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 iniciando em 1000.
Existe uma maneira mais conveniente do que usar um tipo bigint para contar segundos antes / depois de 1/1/1970 usando um carimbo de data / hora Unix ou mudar para um software de banco de dados que suporte períodos maiores?
mysql
database-design
best-practices
timestamp
date-format
David LeBauer
fonte
fonte
Respostas:
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. O intervalo de valores para diferentes tipos de dados numéricos no MySQL está disponível em Visão Geral dos Tipos Numéricos . Os requisitos de armazenamento estão disponíveis em Requisitos de armazenamento do tipo de dados .
fonte
Nenhum tipo de dados de data RDBMS nativo será útil para aplicativos que exigem datas muito antigas (e para algumas, até futuras).
Se eu fosse você, usaria um tipo de seqüência de caracteres para o armazenamento nativo e ficaria com um formato de local significativo como: + AAAA-MM-DD para acomodar o BC / AD e qualquer data histórica ou razoável futura prevista.
Se isso ajudar, você poderá criar uma classe de biblioteca que converta seu formato de armazenamento interno em um formato mais apresentável para a camada da interface do usuário. Você pode até incluir funções de biblioteca que se convertam em um tipo de data nativo, se o idioma de sua escolha suportar as datas que você terá no seu banco de dados.
fonte
CHECK
restrição para impor um formato de sequência de datas. Infelizmente, o MySQL não impõeCHECK
restrições.BIT
ouBOOLEAN
para indicar a polaridade da data. :) Obviamente, se você fizer isso, estará por conta própria se realizar cálculos nessas datas "BC". Quem sabe que tipo de ajustes de calendário que são normalmente tomadas de cuidados para nós por funções de biblioteca seriam perdidas enquanto manipulando os "falsos" datas BC ...Que tal ter um único campo flutuante na tabela em que armazenamos datas em formato numérico, por exemplo, 2015-10-12 10:12:05 será armazenado em 20151012. 101205. É sempre melhor classificar em campo único em vez de ter 3 ou mais campos diferentes.
A lógica acima não funciona para poucos cenários. Assim, convertemos a data em segundos considerando 1 dia = 86400 segundos. Negativo usado para datas de BC. Funciona como esperado.
fonte