간단한 팁을 하나 설명할까 합니다.
요새 SQLite 를 많이 쓰더군요..
원격 DB 가 아닌 로컬 DB 로써 이만한 물건이 없더군요...
속도도 엄청 빠르고...
암호화도 되고 (이건 유료지만 구글한테 잘 물어보면...소스가 있습니다..ㅋ)
암튼..이넘은 참 좋은데 한글이 간혹 문제더군요...
그래서 여러모로 사용해 본 결과....알아냈습니다..
일단 그냥 ansi 로 한글을 넣어도 잘 됩니다..
UTF8 이나 UTF16 등으로 할 필요 없이 그냥 insert 하고.. select 하면 잘 검색이 됩니다..
단 SQLite 관리 툴 등에서는 깨져서 보이죠..기본 이코딩이 UTF8 로 되어있기 때문에 그렇습니다.
그런 툴에서 지원하는지는 모르겠지만 ANSI 로 인코딩해서 보여주는걸 제공하는 툴은 볼 수 있더군요..
근데 ansi 로 한글을 처리할 경우 문제가 있더군요...
드물긴 하지만.. 제가 사전을 개발 중인데요.. db 를 sqlite 를 사용하는데..
한글 문자열을 가지고.. 대/소 비교를 합니다... 이게 ansi 일 경우 버그가 있더군요...
그래서 고민끝에...해결 했는데요..
처음에 db 생성시에... 그냥 ansi 문자열의 db 파일 경로를 넣어서 생성하구요..
그 다음 table 생성시에 이것또한 ansi 문자열로 create table .... 하면 됩니다..
물론 테이블의 필드명은 영문으로 하시는게 좋을듯 하네요..
그 다음.. insert into.. 문... 이걸 UTF8 로 바꾸어 처리하면 됩니다...
UTF8 도 멀티바이트 즉 char* 로 표현되기 때문에... 문제없이 잘 됩니다.
당연 insert into 문 안에 한글이 들어가 있겠죠...
ansi 를 utf8 로 바꾸는건 찾아보면 알겠지만 단 3줄로 됩니다...일단 이렇게 바꾸어서 데이터를 채웁니다.
그 다음...이제 select 를 하게되겠죠..
이 select 문의 결과를 utf8 로 얻기 원한다면... select문을 utf8 로 변환하여 넘기고요..
이 utf8 을 ansi 로 바꿔야 제대로 사용할 수 있습니다..
utf8 을 ansi 로 바꾸는건 ansi 를 utf8 로 바꾸는것보다 조금 복잡합니다..
네이버에 물어보면 알려주더군요...
unicode 로 얻기 원한다면.. select 문을 unicode 로 변환한다음 날리면..
결과값이 unicode 로 넘어옵니다... 즉 해당하는 sqlite 함수이름중에 끝에 16 이라는 숫자가 붙은 함수를 호출해야 겠지요...
즉 wince 같은데서는 바로 사용할 수 있을겁니다...
아! 그리고 다른 팁하나 알려드립니다.
sqlite 에서는 insert 할때 별도의 처리가 없으면..바로 commit 을 해버립니다..
그래서 다량의 데이터...저같이 한 10만데이터를 insert into 할 경우에는
꽤 속도가 걸리더군요...
그래서 좀 찾아봤더니..
insert 전에 begin 을 하고..
insert 하고..
commit 를 하면...속도가 엄청 빠릅니다..
즉 예를 들면..
sql_query("begin;");
for(int i=0; i<100000; ++i)
{
sql_query("insert into table_name values (1,'sss','eee');");
}
sql_query("commit;");
위와같이 처리하면 됩니다...
속도 장난아니게 빠르더군요..
참고하세요
지금 막 알아내서 두서없이 쓴거 같네요..
아무튼..참고하시기 바랍니다...