반응형
MSsql 에서 Mysql 로 홈페이지 이전과 함께 데이터베이스 이전에 대한 포스팅을 썼었는데, 그때 말씀드렸던 문제점 중 날짜 형식이 달라 게시글의 날짜들이 제대로 인식되지 않는다는 문제점을 해결하는 과정을 포스팅하려고 합니다.
왼쪽 그림과 같이 날짜를 제대로 인식 하지 못해서 문서 DB를 뒤져보니...
위와 같이 예전 mssql 에서 받아온 데이터들은 20101109005425 와 같이 2010년 11월 09 12시 54분 25초를 위와 같은 형태를 가지고 있었고, 제로보드 xe에서 받아들이는 날짜는 2010-11-01로 받아들이고 있었습니다. 오류가 난 원인이 바로 이거였기에,
해결 방안으로써 2가지 방안이 생각이 났습니다.
1. php 처리문에서 아예 날짜 형식 mssql 형식처럼 받아들이게끔 수정을 해서 앞으로 기록 되는 데이터들도 20101109005425와 같이 저장이 되도록 만들어 형식을 바꾸지 않는다.
- 이 방안은 PHP를 다 뜯어고쳐야 한다는 단점이 있습니다. mysql 은 테이블에서 컬럼 속성을 위와 같은 속성으로 바꿔주기만 해도 되겠지만, 제로보드 xe를 써보지 않은 저에겐 또 일일이 문서를 찾아보고 만약 오류가 난다면 db만을 백업하고 덮어씌우는 것으로 끝나지 않고 제로보드 자체를 새로 깔아야 한다는 위험부담이 있기에 다른 방법으로 넘어갑니다.
2. 위의 20101109005425 를 2010-11-09 라는 데이터 형식을 변환한다. (쿼리로)
- 이방법이 위 방법보다는 시간이나 고생 면에서 효율적이라 생각해서 2번 방법으로 해결 방법을 찾아가리라 결정합니다.
그렇다면 이제 문제 해결만 남았군요.
쿼리에 대해 무한 검색을 통해,
날짜 데이터 타입에는 DateTime 과 Time, 타임스탬프형식 이 있다는 것을 알아냈습니다.
...
저 위에 쩜 찍혀있는 시간이 4시간이네요^^;
4시간만에 삽질 끝에 찾아낸 알맞는 쿼리이네요...ㅜㅜ
convert 등으 써지질 않아서,
다시 한번 정리하자면 예전 타입은 datetime 이고 이제 제가 원하는 제로보드의 날짜타입은 varchar 타입입니다.
굳이 convert 를 쓰거나 cast를 쓰지 않고 원초적으로 update문으로 쓸껄 괜한 짓을 하다가 시간만 무지 잡아먹었네요....
UPDATE xe_documents SET regdate = DATE_FORMAT(regdate, '%Y%m%d%h%m%s')
고작 이 간단한 쿼리로 모든 걸 해결했네요.
정상적으로 2010-11-22 라면 - 은 빠진 상태로 20101122라고 업데이트가 되었구요
주의 1. 참고로 컬럼타임이 varchar 인경우에만 가능하니 주의하세요...ㅜㅜ
주의 2. 옮기는 과정에서 varchar 30으로 해놨더니 2010-11-22 11:22:33.0000.0000
반응형
'옛글 > Database이야기' 카테고리의 다른 글
식은땀난 NO.2003 can't connet 'mysql' (10061) 확실한 에러해결법 (6) | 2011.02.23 |
---|---|
[SQL이야기] 데이터베이스의 개념과 관계모델 (0) | 2011.01.06 |
DATABASE 도서"운명적 존재를 위한 데이터 베이스 설계" 추천 (0) | 2010.10.28 |
데이터 베이스에 대한 이야기 - 네번째 시간 (0) | 2010.10.28 |
데이터베이스에 대한 이야기 - 세번째 시간 (0) | 2010.10.28 |