SQLite에서 다음 명령문이 성공하고 문자열이 SALARY
유형 의 열에 삽입 / 업데이트됩니다 INTEGER
.
update employee set salary='TOO MUCH' where emp_id=1;
0은 삽입 / 업데이트되지 않지만 실제 "TOO MUCH " 문자열이므로, 이것은 형식적인 형식 변환에 관한 것이 아닙니다.
FAQ는 다음과 같이 말합니다.
이것은 버그 가 아닌 기능 입니다. SQLite는 동적 타이핑을 사용합니다. 데이터 형식 제약 조건을 적용하지 않습니다. 모든 유형의 데이터는 일반적으로 모든 열에 삽입 될 수 있습니다. 임의의 길이의 문자열을 정수 열, 부울 열의 부동 소수점 숫자 또는 문자 열의 날짜에 넣을 수 있습니다. CREATE TABLE 명령에서 열에 할당 한 데이터 유형은 해당 열에 넣을 수있는 데이터를 제한하지 않습니다. 모든 열은 임의의 길이 문자열을 보유 할 수 있습니다. (한 가지 예외가 있습니다. INTEGER PRIMARY KEY 유형의 열은 64 비트 부호있는 정수만 보유 할 수 있습니다. 정수 이외의 다른 것을 INTEGER PRIMARY KEY 열에 넣으려고하면 오류가 발생합니다.)
그럼에도 불구 하고이 동작은 의도적입니다. 그럼에도 불구하고 SQLite 에이 동작이있는 이유 가 궁금 합니다. 내가 알고있는 대부분의 다른 SQL 데이터베이스는 상당히 다르게 동작하기 때문에 숫자가 아닌 문자열을 삽입하려고 할 때 오류가 발생하거나 문자열 0을 변환합니다. 숫자 열.
이 동작이 없으면 SQLite 라이브러리가 유용하지 않습니까?
라이브러리를 작고 빠르게 유지하기 위해 의도적으로 설계된 것입니까?
숫자 열에 문자열을 삽입하려고 할 때 오류가 발생하기 위해 SQLite 라이브러리가 상당히 느리거나 더 커 집니까?