> 1. What are the differences among the 4 recommended functions? As the page you quoted says: > The second argument, "zSql", is the statement to be compiled, encoded as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(), and sqlite3_prepare_v3() interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(), and sqlite3_prepare16_v3() use UTF-16. > > [...] > > sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having the extra prepFlags parameter, which is a bit array consisting of zero or more of the SQLITE_PREPARE_* flags. The sqlite3_prepare_v2() interface works exactly the same as sqlite3_prepare_v3() with a zero prepFlags parameter. So, in a nutshell, UTF-8 vs UTF-16, and prepare flags or lack thereof. > 2. Should I just use sqlite3_prepare_v2() ... is it future proof? It's about as future proof as anything in SQLite, I guess.