SORU
6 Ocak 2010, ÇARŞAMBA


PHP & mySQL: Yıl 2038 Hata: bu Nedir? Nasıl çözmek için?

Zaman DAMGASI tarih saat saklamak için kullanmayı düşünüyorum, ama on yıl 2038 bir sınırlama olduğunu okudum. Toplu olarak sorumu sormak yerine, acemi kullanıcılar daha iyi anlamak için kolaydır böylece küçük parçalara bölmek için tercih ettim. Yani benim soru(s):

  1. Yıl 2038 tam olarak sorun nedir?
  2. Neden ve oluştuğunda ne olur? etmiyorsa
  3. Nasıl çözeriz bunu?
  4. Benzer bir sorun teşkil etmez, hangi bunu kullanarak, herhangi bir olası alternatif var mı?
  5. Biz gerçekten ortaya çıktığında zaman DAMGASI, sözde sorun önlemek için kullandıkları mevcut uygulamalar için ne yapabilirim?

Şimdiden teşekkürler.

CEVAP
6 Ocak 2010, ÇARŞAMBA


Topluluk wiki olarak işaretledim yani rahatca düzenlemek için çekinmeyin.

Yıl 2038 tam olarak sorun nedir?

"2038 yılı problemi (Unıx Y2K sorunu ile benzerliği Hata, Y2K38 Milenyum olarak da bilinir) bazı bilgisayar yazılımı önce başarısız olmasına neden olabilir veya 2038. Sorunu etkileyen tüm yazılım ve sistemlerle deposu " olarak imzalanmış 32 bitlik tamsayı, ve bu yorumlama numarası saniye 00:00:00 UTC 1 Ocak 1970."


Neden ve oluştuğunda ne olur? etmiyorsa

Kat ötesinde03:14:07, Salı günü, 19 Ocak 2038 UTC've bu sistemlerin Aralık ayında bir süre olarak yorumlamak olur, negatif bir sayı, 13, 1901 DAHİLİ olarak depolanmak yerine 2038. etrafında' wrap Bunun nedeni aslında bu sayı saniye beri UNİX epoch (1 Ocak 1970 00:00:00 GMT) olacak aşmış bir bilgisayarın maksimum değer için bir 32 bitlik imzalı tamsayı.


Nasıl çözeriz bunu?


Benzer bir sorun teşkil etmez, hangi bunu kullanarak, herhangi bir olası alternatif var mı?

Deneyin mümkün olan her yerde kullanın büyük türleri için depolama tarihleri veritabanları: 64-bit yeterli olur uzun uzun yazın GNU C ve POSIX/SuS, ya da sprintf('%u'...) PHP veya BCmath uzantısı.


Bazı potansiyel henüz 2038 yılında olmamamıza rağmen kullanım durumları kırılma nedir?

DATETIME ama zaman DAMGASI 1000-9999, bir dizi var bir MySQL sadece 1970-2038 bir dizi vardır. Eğer sisteminiz doğum günlerinin, gelecek ileri tarihler (örneğin 30 yıl vadeli ipotek kredisi) ya da benzer depolar, zaten bu hata içine çalıştırmak için gidiyoruz. Yine, eğer bu bir sorun olacaksa, zaman DAMGASI kullanma.


Biz gerçekten ortaya çıktığında zaman DAMGASI, sözde sorun önlemek için kullandıkları mevcut uygulamalar için ne yapabilirim?

Birkaç PHP uygulamaları hala etrafında sabit web pek eski bir platform olarak öngörmek olsa 2038, henüz olacak.

Burada veritabanı tablo sütun DATETIME TIMESTAMP dönüştürmek için değiştirme işlemi. Geçici bir sütun 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`

Kaynaklar

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • bored before i even began

    bored before

    30 Mart 2009
  • sWooZie

    sWooZie

    9 ŞUBAT 2006