PHP e MySQL data più piccola e più grande ansible

Qual è la data più grande riconosciuta da PHP e MySQL?

Voglio dire, ho valori diversi per la timeline diversa e voglio renderli tutti come BETWEEN seleziona in MySQL, come questo:

 SELECT * FROM table WHERE date BETWEEN '2011-10-01' AND '2011-10-02'; SELECT * FROM table WHERE date BETWEEN '2011-10-03' AND '2011-10-10'; 

eccetera.

Per get tutte le opzioni, pensavo a qualcosa del genere:

 SELECT * FROM table WHERE date BETWEEN '0000-01-01' AND '2011-10-01'; SELECT * FROM table WHERE date BETWEEN '2011-10-02' AND '2011-10-10'; SELECT * FROM table WHERE date BETWEEN '2011-10-11' AND '9999-12-31'; 

Funzionerà sempre o c'è una possibilità che il codice possa rompersi ad un certo punto?

Il tipo DATE viene utilizzato per i valori con una parte di data ma nessuna parte di tempo. MySQL recupera e visualizza i valori DATE nel formato 'AAAA-MM-GG'. L'intervallo supportto è '1000-01-01' su '9999-12-31'.

tratto da http://dev.mysql.com/doc/refman/5.5/en/datetime.html

Ecco il diverso intervallo di date, dipende dal tipo di colonna:

Come da documenti

Il tipo DATE viene utilizzato per i valori con una parte di data ma nessuna parte di tempo. MySQL recupera e visualizza i valori DATE nel formato 'AAAA-MM-GG'. L'intervallo supportto è '1000-01-01' su '9999-12-31'.

Il tipo DATETIME viene utilizzato per i valori che contengono parti di data e ora. MySQL recupera e visualizza i valori DATETIME nel formato 'AAAA-MM-GG HH: MM: SS'. L'intervallo supportto è '1000-01-01 00:00:00' su '9999-12-31 23:59:59'.

Il tipo di dati TIMESTAMP viene utilizzato per i valori che contengono parti di data e ora. TIMESTAMP ha un intervallo di '1970-01-01 00:00:01' UTC in '2038-01-19 03:14:07' UTC.

Potresti farlo in questo modo:

 SELECT * FROM table WHERE date < '2011-10-01'; SELECT * FROM table WHERE date BETWEEN '2011-10-02' AND '2011-10-10'; SELECT * FROM table WHERE date > '2011-10-11' 

Il tipo DATETIME di MySQL support da "1000-01-01" a "9999-12-31". Questo dovrebbe essere sufficiente.

PHP può analizzare anche quelli; non sono anni a due cifre, quindi va bene. Ho appena eseguito strtotime su 9999-01-01 e ha funzionato.

Le date non sono altro che numbers interi. La dimensione intera dipende dal sistema; cioè 32 bit, 64 bit, ecc.

In PHP la dimensione integer può essere determinata usando la costante PHP_INT_SIZE e il valore massimo usando la costante PHP_INT_MAX

In mysql puoi fare qualcosa di simile a questa: SELECT ~ 0 come max_bigint_unsigned

Forse ottieni prima i valori massimi e minimi dalla tua tabella:

 SELECT * FROM table WHERE date BETWEEN (SELECT MIN(date) FROM table) AND (SELECT MAX(date) FROM table)