SQLite에 없는 두 타입
SQLite에는 DATE나 DATETIME 타입이 없고 BOOLEAN도 없어. 둘 다 기존 타입 위에 얹은 관습이야. 날짜를 담는 데 쓸 만한 방법은 세 가지야.
- ISO 8601 TEXT —
'2026-05-03 12:00:00'같은 모양이야. 사람이 읽기 좋고, 문자열로 정렬해도 순서가 맞고, SQLite 날짜 함수가 전부 알아들어. 이걸 기본으로 삼아. - Unix epoch INTEGER — 1970년 이후 흐른 초야. 작고, 비교가 빠르고, 어느 언어에서든 다루기 쉬워. 숫자 범위로 크게 걸러내야 할 때 좋아.
- Julian Day REAL — 천문학 쪽 관습이야. 앱 코드 입장에서 이게 정답인 경우는 거의 없어.
Boolean은 SQLite가 0과 1을 정수로 저장하고 TRUE와 FALSE literal도 받아줘. 이건 1과 0으로 컴파일돼. 그래서 어디서나 이런 모양이 보여. archived INTEGER NOT NULL DEFAULT 0.
Self-reference: 피파의
conversations 테이블이 created_at과 updated_at에 ISO 8601 text를 쓰는 이유가 있어. JSONL ground truth도 ISO 8601이거든. 그러면 둘을 byte 단위로 맞대볼 수 있고, 싹 지우고 다시 재생해서 복구하는 과정이 단순해져.