이거때문에 30분 썼다. 제기랄...
SQLite 를 쓸 때, 처음 설계와 달라져서 TABLE 에 FIELD 를 추가/변경해야 한다면, 두 가지 방법으로 할 거다.
1. SQLITE Manager 프로그램을 열어서 어플리케이션으로 테이블 조작.
2. ALTER TABLE 사용.
나는 별 생각없이 1.번으로 작업했는데, 이게 좀 문제가 있었다.
상황 설명은 아래와 같다.
11. 추가하려는 필드는 filename, datetime 의 2개
12. 필드 속성은 filename = varchar(256), datetime = DateTime
13. 그런데, 알다시피 SQLite 는 지원하는 DateType 이 5가지 밖에 없다. INTEGER, TEXT, REAL, NUMERIC, BLOB.
( 자세한 건 아래의 링크 들어가서 봐라. )
http://www.sqlite.org/datatype3.html
14. 그런데, 나는 이미 데이터형으로 DateTime 과 varchar(256) 을 이용하고 있었다.
물론 SQLITE 에서는 지원하지 않지만, 이미 데이터 설계를 이렇게 해 버려서, 일관성을 위해, 추가하는 데이터 형태도 동일하게 코딩하려고 햇다.
또한, 이 DateTime 값이 조금 이슈가 있는데, 인터넷에서 뒤져본 것과 다르게 동작하는 경우가 있었다. ( 이건 나중에 이야기. )
15. 그래서, SQLITE 에서 지원하지 않는 varchar(256) 과 DateTime 속성을 Field 에 임의로 지정했다.
[ 필드의 데이터 타입을 지정하는 dropdown 박스에 데이터값을 선택하는 게 아닌 타이핑 쳐서 직접 입력하는 것. ]
이게 바보짓이었다.
SQLite 는 기본 데이터 타입을 가지고 있는데, 이것이
21. CREATE TABLE 을 통해 SQL 문으로 테이블을 생성할 경우, SQLite 에서 지원하지 않는 date type 이라고 하더라도 field 의 data type 속성에 일단 받아들이기는 한다.
물론 , 받아들인 다음에는 지멋대로 바꾸는데, 이건 데이터 변환 타이밍과 관련된 이야기라서 또 다른 이야기다.
22. SQL 문으로 ALTER 를 할 경우에도, 21.번과 같이 SQLite 에서 지원하지 않는 date type 이라고 하더라도 field 의 data type 속성에 일단 받아들이기는 한다.
23. SQLite Manager 프로그램을 쓰면서 dropdown 의 속성에 INTEGER, TEXT, BLOG, REAL, NUMERIC 의 기본 속성값 이외의 다른 값을 넣으려고 하면, 이건 받아들이지 않는다. 기본값으로 INTEGER 가 설정되어 버린다.
즉, 예를들어 SQLITE 에서 기본 지원하지 않는 DATETIME 이라는 DateType 을 이용하려 할 경우, Field type 을 변경할 때 SQLite Manager 를 사용하면 변경이 안 된다. 반드시 ALTER TABLE 을 이용한 SQL 구문으로 변경하거나 추가해라.
또 하나, SQLite 는 ALTER TABLE ADD ... 대신에 ALTER TABLE ADD COLUMN ... 을 쓴다. 자세한건 http://www.tutorialspoint.com/sqlite/sqlite_alter_command.htm 를 참고해라.
'프로그램' 카테고리의 다른 글
SQLite 는 ALTER TABLE MODIFY 가 없단다. (1) | 2016.09.04 |
---|---|
SQLite 에서 DateTime 을 사용하려면, TEXT 대신 Unixtime 사용을 추천한다 (0) | 2016.06.23 |
SQLITE 에는 TRUNCATE 가 없다. (0) | 2016.06.03 |
이미지 병합 프로그램 버전업 4. (8) | 2016.05.19 |
키보드 코드표 (0) | 2016.03.21 |