프로그램

SQLite 에서 DateTime 을 사용하려면, TEXT 대신 Unixtime 사용을 추천한다

(주)CKBcorp., 2016. 6. 23. 05:00
반응형

말 그대로다. 이건  http://ckbcorp.tistory.com/1027 하고도 이어지는 주제다.

너님이 SQLite 에서 DateTime 을 이용할 때 데이터 타입을 뭘 쓸 거냐?

TEXT 쓰겠지? 왜냐면 SQLite 는 데이터 타입으로 DateTime 를 지원하지 않으니까.

그런데, 내 경험으로는, TEXT 보다 INTEGER 나 NUMERIC 이 명확하다. 

이야기하기가 조금 까다로운데, 최대한 알기쉽게 가보자.



1. SQLite 는 DateType 으로 DateTime 이 없다. 

2. 그런데 쿼리로 기간 관련 검색을 하려면 , 보통  'yyyy-MM-dd HH:mm:ss'  로 검색을 할 거다.

3. 기간 검색이라는 게, 결국은 문자열 검색이니, DateTime 이 없는 SQLite는 당연히 타입으로 TEXT 가 아니냐.

고 생각하겠지?

4. 근데 나는 DateTime 대신으로 TEXT 대신 INTEGER, NUMERIC 을 쓰라는 거다.

이렇게 되면 데이터를 저장, 갱신, 검색할 때 사용자 ( 혹은 프로그램 ) 에서 발생하는 시각 정보를 디비에서 꺼내거나 저장할 때, 무조건 UNIXTIME 으로 변경하는 번거로움을 거쳐야 한다.

그런데 왜 SQLITE에서 시간 정보 저장을 TEXT 대신 UNIXTIME 으로 하라는 건가?


그건, SQLite 의 DateTime 을 NULL 처리가 지멋대로이기 때문이다. 


아...갑자기 쓰기가 급 귀찮다. 최대한 짧게 설명하면,

예를 들어 너님이 C# + SQLite 를 사용하는데,  디비에서 데이터를 꺼내온다 치자. 그럼 


DateTime 날짜변수1 = reader["날짜필드명"]; 


이럴 거잖아? 이때 "날짜필드명" 이 만약 NULL 이면, 프로그램상에서 case 가 너무 많이 생긴다고. NULL, "", 데이터포멧 안맞는 "2019-05" 뭐 기타등등등...

오히려 unixtime 이라고 가정하면 0 값인지 아닌지만 판단하면 된단 말야.


[ 설명이 귀찮다. 알아서들 알아들으시게.개 ]



반응형