2012-08-30 3 views
0

PHP로 csv 파일에서 datetime을 읽고 mysql 데이터베이스에 저장하는 작업이 있습니다. csv 파일에는 datetime의 두 가지 형식이 있는데, 첫 번째는 DD/MM/YYYY HH:mm:ss AM/PM이고 두 번째 형식은 MM-DD-YYYY HH:mm:ss AM/PM입니다. 그런 다음 나중에 datetime을위한 일부 행을 선택해야합니다.mysql과 PHP에 대한 datetime

조금 혼란스러워 보입니다. 내 뇌에는 몇 가지 질문이 있습니다.

  1. varchar 유형을 저장하기 위해 mysql 테이블에 설정하는 것이 쉽습니다. 그러나 문자열을 datetime으로 먼저 변환하고 기간의 데이터를 검사해야하기 때문에 을 나중에 일부 행을 선택하는 데 어려움이 있습니다.

  2. 또 다른 해결 방법은 데이터베이스에 저장하기 전에 datetime을 datetime으로 변환하는 것입니다. 그렇다면 나중에 데이터를 선택하기 쉽습니다. 그러나 첫 단계도 조금 복잡합니다.

일부 사용자에게는이 질문에 대한 좋은 아이디어 나 비슷한 문제가 있는지 알 수 없습니다.

+0

타임 스탬프로 저장할 수 있습니다. 'strtotime()'을 사용하여 데이터베이스에 int (10)로 저장하십시오. –

+1

'datetime'! ='varchar' –

+0

'datetime'을 사용할 지 또는'datetime'을 사용할지를 결정하기 전에 [이 기사를 읽으십시오 (http://stackoverflow.com/questions/409286/datetime-vs-timestamp) int'. – Kermit

답변

1

첫째 : 결코 EVER 저장 날짜 또는 날짜 시간 문자열로 데이터베이스있다.

절대 안됩니다.

알았습니까?

데이터베이스의 기본 제공 date 또는 datetime 데이터 유형으로 변환해야합니다.

이 작업을 수행하지 않으면 나중에 매우 어려운 결과를 초래할 수 있습니다. 예를 들어, 문자열을 다양한 형식으로 저장하는 경우 날짜순으로 정렬하도록 데이터베이스를 가져 오려고합니다. 그리고 당신이 확신 할 수있는 한 가지가있는 경우, 데이터베이스에 날짜가있을 때, 주어진 날짜 이전, 이후 또는 이전 항목을 기준으로 쿼리해야합니다. 당신이 그들과 함께 그런 종류의 일을 할 필요가 없다면, 첫 번째 장소에 날짜를 저장하는 것이 많지 않을 것입니다. 그래서 당신이 아직 그것을하도록 요청받지 않았다면, 그것을 주어진 것으로 생각하십시오 나중에 요청할 것입니다. 따라서 항상 항상은 varchar가 아닌 올바른 데이터 형식으로 항상 저장합니다.

다음으로 처리해야하는 형식의 혼합.

이것은 정신 이상입니다.

나는 PHP의 strtotime() 기능을 싫어하고 싫어한다. 그것은 느리고, 불행한 불만을 가지고 있으며, 일반적으로 과거의 유산으로 간주되고 사용되지 않아야합니다. 그러나,이 경우, 그것은 단지 당신의 구조에 올 수 있습니다.

strtotime()은 알 수없는 형식으로 날짜 문자열을 수락하고 구문 분석 한 다음 정확한 시간 소인을 출력하도록 설계되었습니다. 분명히 dd-mm-yyyymm-dd-yyyy 형식의 존재를 처리해야합니다. 구분 기호를 보면서 당신이 의미 한 두 가지를 추측하여이 작업을 수행합니다.

구분 기호로 슬래시를 사용하는 경우 형식은 mm/dd/yyyy으로 가정합니다. 대시를 사용하는 경우 dd-mm-yyyy으로 가정합니다.이것은 평범한 사용법에서 strtotime() 같은 고통을 사용하는 작은 단점 중 하나입니다. 하지만 여기가 네 친구 야.

실제로 작동하는 방식은 실제로 질문에서 지정한 형식과 정반대입니다. 그러나 그것은 당신을 도울 정도로 충분해야합니다. 입력 문자열에서 슬래시와 대시를 전환하고 결과를 strtotime()으로 전달하면 질문에 설명 된대로 모든 경우에 올바른 타임 스탬프가 생성됩니다.

그러면 데이터베이스에 올바르게 저장할 수 있어야합니다.

그러나이 테스트를 매우 철저히 권장합니다. 그리고 그것이 어딘가에 줄을 따라 부서지면 놀라지 않을 것입니다. 일치하지 않는 형식으로 데이터가 공급된다면 일관성없는 일관성을 보장 할 방법이 없습니다. 프로그램은 기본적으로 나쁜 데이터로 최선을 다해야합니다.

또한 입력 데이터의 품질에 관해 몇 가지 중요한 질문을 제기해야합니다. 이 상황에서 프로그램을 안정적으로 사용할 수는 없습니다. 그것을 공급하고있는 사람에게 그것이 충분히 좋지 않다는 것을 분명히하십시오. 프로그램이 불량 데이터로 인해 고장 나면, 귀하의 잘못이 아니라 귀하의 잘못입니다.

+0

여러분 모두 고마워요. 입력 데이터가 통합되면 프로그램이 어렵지 않습니다. 나쁜 데이터 때문에 문제를 해결하는 데 더 많은 시간을 할애해야합니다. – PhilipSong

+0

@PhilipSong - 그렇다면'strtotime()'에 대한 제 제안이 도움이 되었습니까? – Spudley

+0

예. 당신의 제안은 아주 좋습니다. – PhilipSong