2010-06-01 8 views
17

가능한 중복 :
datetime vs timestamp?유닉스 타임 스탬프

나는 열 add_date이있는 MySQL의 테이블을 가지고있다. 레코드가 데이터베이스에 추가 된 날짜/시간을 추적합니다. 1 시간 전, 3 주 전 1 년 전 등

  • 사용자가 어떤 일에 삽입 된 기록을 검색 할 수 있습니다 : 레코드 형식에서 추가되었다

    1. 표시 :이 테이블을 기반으로

      쿼리/월/년. 따라서 사용자는 2009 년에 삽입 된 레코드 만 볼 수 있도록 선택할 수 있습니다.

    유닉스 타임 스탬프 또는 datetime이 더 좋을까요?

    지금은 둘 다 사용하고 있지만 시간이 지남에 따라 테이블에 수백만 개의 레코드가 있으므로 두 열 모두를 사용하면 데이터베이스 크기에 영향을 줄 수 있습니다.

    유닉스 타임 스탬프는 PHP에서 2 hours 형식으로 변환하기에 더 좋을 것으로 보이며 시간대와도 독립적입니다. 그러나 datetime은 가독성이 뛰어나며 특정 날짜/시간/연도에 대한 쿼리를 만드는 것이 더 쉬워 보입니다.

    제안 사항?

  • 답변

    14

    선택 사항이 있으시면 mySQL 날짜로 이동하십시오.

    • 당신은 훨씬 더 빨리 될 것입니다 (등 BETWEEN(), DATE_ADD)의 MySQL의 날짜 함수

    • 날짜 관련 쿼리를 사용하여 스팬 date range issue

    • 쉽게 시간을 조회 할 수 있습니다

      을 돌볼 필요가 없습니다 특히 수백만 개의 레코드가있는 경우 큰 쿼리에서 값 비싼 을 사용할 필요가 없기 때문에

    • chi 필요한 경우 DATE 필드를 UNIX 타임 스탬프로 변환하는 ld의 놀이.

    +2

    . PHP 끝에서 타임 스탬프를 가지고 놀고 싶다면 UNIX_TIMESTAMP (your_column)을 사용하면된다. 그러나 데이터베이스에서 기본 날짜 형식을 사용하여 날짜를 저장하십시오. 또한 데이터베이스의 데이터는 타임 스탬프보다 SQL 날짜 형식을 선호하는 다른 응용 프로그램에서 사용될 수 있습니다. – Arkh

    +0

    시간대와 관련하여 날짜를 유닉스 타임 스탬프로 변환하는 데 문제가 있습니까? – Yeti

    +1

    @Lost_in_code 좋은 질문입니다. 여기에는 mySQL 서버의 시간대 설정 및 PHP가 기본적으로 사용할 시스템의 시간대 설정과 관련된 여러 가지 요소가 있습니다. 일반적으로, mySQL DATETIME 필드는 시간대를 구분하지 않습니다. 거기에 UTC 날짜를 저장하는 한 쉽게 타임 스탬프로 변환 할 수 있어야하지만, mySQL 및/또는 PHP에 UTC와 다른 시간대가 있으면주의해야합니다. 관련 항목 : http://stackoverflow.com/questions/18449/dealing-with-php-server-and-mysql-server-in-different-time-zones –

    4

    나는 mysql 형식으로 가고 싶다. mysql은 datetime 함수가 풍부하기 때문에 타임 스탬프와 함께 사용하면 다른 변환이 필요하다.

    하지만 테이블이 모두 열이 데이터베이스의 크기에 영향을 미칠 수있는 데, 시간이 지남에 수백만 달러를 기록 이 때문에

    .

    오 마이.
    정말로 4 메가 ​​바이트의 공간이 더 필요하십니까?

    +0

    나는 얼마나 많은 공간이 필요할지 모르겠다. (필자는 대형 데이터베이스에 익숙하지 않다). 당신이 MB의 몇 가지있을 거라고 말한다면 나는 둘 다 가지고 문제가 표시되지 않습니다. – Yeti

    +0

    번호를 모르는 경우에는 언급하지 마십시오. 프로그래머가 추측해서는 안됩니다. 기상 예보관 일이야. http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html은 datetime이 타임 스탬프 - 4에 대해 8 바이트 및 int를 사용한다는 것을 알려줍니다. 따라서 4 * 1000000 = 4MB 미만 –

    +1

    당신은 ' 아마도 두 필드 모두에서 인덱스를 사용하려고 할 것입니다. 공간적으로 너무 비싸지는 않지만 여러 필드 인덱스를 사용하는 경우 성능에 영향을 줄 수 있습니다. – Kaivosukeltaja

    3

    unix 타임 스탬프와 MySQL from_unixtime() 함수를 사용하여 최상의 결과를 얻을 수 있습니다. 결과는 필요에 따라 datetime 형식으로 변환됩니다.

    +1

    또한 datetime을 사용하고 필요에 따라 날짜 기능을 사용하여 유닉스 타임 스탬프로 변환함으로써 두 가지 장점을 모두 얻을 수 있습니다. datetime 데이터 유형을 사용하면 많은 쿼리가 쉬워진다는 것을 감안할 때, 그렇게하는 것이 낫다고 말할 수 있습니다. –

    +0

    El Yobo가 뭐라고 말합니까? 잠재적 인 성능 손실은 큰 테이블에서'from_unixtime()'을 부끄럽게 만들 수있다. (벤치 마크는 없다.) –

    +0

    물론 from_unixtime()은 대량의 결과를 가져올 것으로 예상되는 쿼리에는 사용하지 말아야한다. 결과 집합을 반환하는 데이터 만 표시 할 수 있습니다. 또한 datetime 유형을 사용하여 unix_timestamp ('2010-06-01 13:00')로 쿼리를보다 쉽게 ​​읽을 수 있습니다. 변환은 쿼리 당 한 번만 수행되므로 성능 손실이 없습니다. – Kaivosukeltaja