I have marked this as a community wiki so feel free to edit at your leisure.
What exactly is the Year 2038 problem?
"(Aynı zamanda Y2K problemi kıyasen Unix Milenyum Bug, Y2K38 olarak da bilinir) 2038 yılının sorun bazı bilgisayar programı önce veya yıl 2038 yılında başarısız olmasına neden olabilir. Sorun, tüm yazılım ve imzalı 32 olarak sistem saatini saklamak sistemleri etkiler -bit tamsayı ve 1 Ocak 1970 00:00:00 UTC beri saniye sayısı olarak bu sayı yorumlamak. "
Why does it occur and what happens when it occurs?
03:14:07 UTC on Tuesday, 19 January 2038 'etrafında sarmak' ve bu sistemler 2038 13 Aralık 1901 bir zaman olarak yorumlamak yerine bir negatif bir sayı olarak dahili saklanabilir. Bu gerçeği nedeniyle ötesinde katıdır sayı saniye beri UNIX dönem (1 Ocak 1970 00:00:00 GMT) 32-bit işaretli tamsayı için bir bilgisayarın maksimum değerini aşmış olacak.
How do we solve it?
Are there any possible alternatives to using it, which do not pose a similar problem?
Mümkün veritabanlarında tarihleri depolamak için büyük türlerini kullanmaya çalışın: 64-bit yeterlidir - GNU C ve POSIX uzun uzun tip / SuS, veya sprintf('%u'...)
PHP veya BCMath uzantısı.
What are some potentially breaking use cases even though we're not yet in 2038?
Yani MySQL DATETIME 1000-9999 arasında bir dizi var, ama TIMESTAMP sadece 1970-2038 yelpazesine sahiptir. Sistem doğum günlerinin, gelecek ileri tarihlerini (örneğin 30 yıl ipotek), veya benzer depolar, zaten bu hata çalıştırmak için gidiyoruz. Bu bir sorun olacak olursa yine, ZAMAN kullanmayın.
What can we do to the existing applications that use TIMESTAMP, to avoid the so-called problem, when it really occurs?
Henüz pek bir miras platformu web olarak öngörmek zor olsa birkaç PHP uygulamaları hala, 2038 yılında civarında olacak.
Burada TIMESTAMP
DATETIME
dönüştürmek için bir veritabanı tablosu sütun değiştirmek için bir işlemdir. Bu geçici bir sütunu oluşturma ile başlar:
# rename the old TIMESTAMP field
ALTER TABLE `myTable` CHANGE `myTimestamp` `temp_myTimestamp` int(11) NOT NULL;
# create a new DATETIME column of the same name as your old column
ALTER TABLE `myTable` ADD `myTimestamp` DATETIME NOT NULL;
# update all rows by populating your new DATETIME field
UPDATE `myTable` SET `myTimestamp` = FROM_UNIXTIME(temp_myTimestamp);
# remove the temporary column
ALTER TABLE `myTable` DROP `temp_myTimestamp`
Resources