2016-07-31 3 views
0

나는 다음과 같은 테이블에 내 SQLite 데이터베이스에 문자열을 전달할 수 있는지 확인하기 위해 테스트되었습니다SQL에서 datetime을 사용해야하는 이유는 무엇입니까?

CREATE TABLE TIMES(
    ID    INT    PRIMARY KEY     , 
    TIME_START  DATETIME  DEFAULT CURRENT_TIMESTAMP , 
    TIME_STOP  DATETIME         , 
    CONSTRAINT FUTURE_DATE CHECK 
     (TIME_START >= CURRENT_TIMESTAMP AND TIME_STOP >= CURRENT_TIMESTAMP) 
); 

을 위하여 :

INSERT INTO TIMES VALUES (1, "2016-07-31 07:08:00", NULL) 

그것은 아무 문제를 통과하지 않습니다. 나는 이것을보고 약간 놀랐으므로 또 다른 값을 시도했다 :

INSERT INTO TIMES VALUES (2, "9999999999 07:08:00", NULL) 

그리고 통과했다. 이것은 DATETIME 값만을 허용하기로되어 있으므로 걱정이됩니다. 다른 값을 시도했습니다 :

INSERT INTO TIMES VALUES (3, "9999999999:::::::::", NULL); 
INSERT INTO TIMES VALUES (4, "9999999999 99:99:99", NULL); 
INSERT INTO TIMES VALUES (6, "this is some really random text", NULL); 
INSERT INTO TIMES VALUES (6, "9999999999999999999", NULL); 

마지막 하나만 남았습니다. 내 질문은 왜 데이터 형식의 유효성을 검사하지 않을 때 날짜 시간을 사용합니까? CHAR을 사용할 수 없습니다 (사실 CHARDATETIME보다 많은 제약이 있으므로 글자 수를 제한합니다).

이러한 모든 테스트됩니다

답변

0

SQLite는이 dynamic typing을 사용; DATETIME 또는 CHAR¹ 또는 FLUFFY BUNNIES를 사용하는지 여부는 중요하지 않습니다. (

CREATE TABLE Times(
    Time_Stop DATETIME CHECK (date(Time_Stop) IS NOT NULL), 
    [...] 
); 

¹ 그리고 CHAR을 : 당신이 값이 supported formats의에 있음을 시행하려면

, 일부 built-in date function 그것을 구문 분석 할 수 있는지 확인하기 위해 명시 적 제약 조건을 추가 할 수 있습니다 x)는 이 아니며 길이를 제한합니다.

+0

그런 다음 입력해야하는 이유는 무엇입니까? 그렇게하는 데 어떤 이점이 있습니까? (어떤 유형이 어디에 있어야하는지 알지 못함) –

+0

다른 SQL DB와의 호환성. –

관련 문제