2011. 1. 26. 17:06

sqlite unicode 지원(sqlite3_exec16)하기와 간략한 sqlite 예제


sqlite는 기본적으론 UTF-8(즉, 어떻게 보면 ANSI)가 사용됩니다.
만일 unicode 문자가 포함된 query를 실행하려면, 해당 문자를 UTF-8로 변환하고,
query한 결과를 또한 Unicode로 변환하여 작업해야 하는 번거로움이 따릅니다.

http://jacking.springnote.com/pages/2827800
에 따르면, sqlite에서는 ~~~~16(...) 함수가 있기 때문에 UTF-16도 내부적으로 지원된다고 하였지만,
정작 sqlite3_exec16 함수가 없기 때문에 사용할 수 없는 현상이 발생했다고 언급하고 있습니다.

위 경로를 통해 unicode를 지원할 수 있었으며,
최신 sqlite 3.7.4에 적용한 library를 sqlite_unicode.zip에 공유합니다.
사용하실 프로젝트에서 해당 lib를 import하시기 바랍니다.

앞으로 sqlite3가 어떻게 코드 수정이 이뤄질지 모르기 때문에,
수정에 따른 before / after 코드를 함께 공유하여, 유용성을 높였습니다.
내부에 있는 diff.zip을 통해 확인해 보시기 바랍니다.

sqlite3_exec16 함수는 새로 추가되었는데,
해당 함수는 sqlite3_exec을 기반으로 만들어졌습니다.
exec_diff.zip을 통해 sqlite3_exec16과 sqlite3_exec 함수의 차이점을 확인하시기 바랍니다.
물론 이것도 향후 sqlite3가 어떻게 변경될 지 모르기 때문에 공유하였습니다.
가지고 계신 diff 프로그램으로 확인해 보시기 바랍니다.

간략한 예제는 다음과 같습니다.
(C++ Wapper 보다 간단하지 않나요?)

즉, 한글, 일본어, 태국어로 DB를 읽고 쓰고 있는 것을 확인할 수 있습니다.
그리고 그 과정에서 WideCharToMultiByte(...)과 같은 변환 함수는 사용되지 않았으며,
순수하게 DB 파일에 unicode로 저장되었음을 확인할 수 있습니다.

실행하면 다음과 같은 메시지창이 발생됩니다.





참고) sqlite는 public domain licencing이니깐... 뭐 이렇게 코드 수정 & 공유해도 문제는 없을 듯 한데,
혹시 문제된다면, 알려주시면 감사하겠습니다.