MySQL çeşitli tarih / zaman alan türlerinden artıları ve eksileri nelerdir?

5 Cevap php

MySQL tarih ve zaman DATETIME, TIMESTAMP ve tamsayı (01/01/1970 beri saniye sayısı) olarak saklanabilir. Her yararları ve sakıncaları bir lamba yığını altında gelişen, özellikle nelerdir?

5 Cevap

  • TIMESTAMP ek ve (temelde yıl, ay, gün, saat, dakika ve saniye oluşan sadece bir dize olsa), tip TIMESTAMP bir alan otomatik kayıt takıldığında güncellenmiş veya değiştirilmiş hiçbir açık bir MySQL özel bir yöntem saklanır alan değeri verilir:

    mysql> create table timestamp_test(
        id integer not null auto_increment primary key, 
        val varchar(100) not null default '', ts timestamp not null); 
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> insert into timestamp_test (val) values ('foobar');
    Query OK, 1 row affected (0.00 sec)
    
    
    mysql> select * from timestamp_test;
    +----+--------+----------------+
    | id | val    | ts             |
    +----+--------+----------------+
    |  1 | foobar | 20090122174108 |
    +----+--------+----------------+
    1 row in set (0.00 sec)
    
    
    mysql> update timestamp_test set val = 'foo bar' where id = 1;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    
    mysql> select * from timestamp_test;
    +----+---------+----------------+
    | id | val     | ts             |
    +----+---------+----------------+
    |  1 | foo bar | 20090122174123 |
    +----+---------+----------------+
    1 row in set (0.00 sec)
    
    
    mysql>
    
  • DATETIME MySQL tarih ve zaman fonksiyonları ile birlikte çalışır tarihler ve saatler için standart veri türüdür. Muhtemelen pratikte bu kullanmak istiyorum

  • Eğer bu alanda depolanan belirli tarihlere dayalı veritabanını sorgulamak niyetinde azından - eğer nedeniyle zaman dilimleri, artık yıl ve benzeri gibi ilginç sorunlara solucanlar gerçek bir kutu açıyor gibi TAMSAYILI formatta saklanması tarihleri, tavsiye edilmez.

Ben MySQL DATETIME veya TARİH alanları kullanarak verileri kaydetmek istiyorum. En azından, yıl 2038 tarih değerlerini saklamak için gidiyoruz: http://en.wikipedia.org/wiki/Year_2038_problem. Eğer farklı tamsayıları depolayan bir sistem üzerinde iseniz, bu sorunu olmayabilir.

Bu tarih değerlerini hatta damgaları karşılaştırmak hala kolaydır.

SELECT * FROM myTable WHERE startDate > '2009-01-01'
SELECT * FROM myTable WHERE UNIX_TIMESTAMP(startDate) > 1232541482

Peki ben şu açıklamak yardımcı olacaktır sanırım.

Tarih ve zaman mysql bir DATETIME alanda saklanabilir.

Alanı otomatik oluşturulması üzerinde dolu olacak - bir satır oluşturulduğu zaman damgası istiyorsanız DAMGASI kullanılır.

Tarih için bir tamsayı kullanarak bu DATETIME yapar aslında ne olduğundan biraz overkill ama her zaman sizin için dönüşüm tüketen gelmez.

Belirli bir yararı var mı yoksa hakkında bulmak istiyoruz dezavantajı,?

Mysql damgası çok zor olabilir. Otomatik olarak (açıkça bunu güncellemek Yüklü bile) her satır güncelleştirme onun değerini değiştirir alanı ile sona erebilir dikkatli ilan değilse.

http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

Eğer bir zaman damgası için milisaniyelik vefa gerekiyorsa, bir tamsayı olarak kaydetmeniz gerekir. Olsa da dikkatli olun, bu karmaşık şeyler yapabilirsiniz.