프로그램

SQLite Manager 프로그램을 사용할 경우, Modify 메뉴는 ALTER TABLE 과 다르게 동작한다.

(주)CKBcorp., 2016. 6. 21. 16:36
반응형


이거때문에 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://redroid.tistory.com/1

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 를 참고해라.


반응형