int sqlite3_collation_needed( sqlite3*, void*, void(*)(void*,sqlite3*,int eTextRep,const char*) ); int sqlite3_collation_needed16( sqlite3*, void*, void(*)(void*,sqlite3*,int eTextRep,const void*) );
為了避免在使用資料庫之前必須註冊所有排序序列 (collation sequence),可以向資料庫連線註冊單一回呼函式,以便在需要未定義的排序序列時呼叫。
如果使用 sqlite3_collation_needed() API 註冊該函式,則會以 UTF-8 編碼的字串形式傳遞未定義排序序列的名稱。如果使用 sqlite3_collation_needed16(),則會以機器原生位元組順序的 UTF-16 形式傳遞名稱。呼叫任一函式都會取代現有的 collation-needed 回呼函式。
呼叫回呼函式時,傳遞的第一個參數是 sqlite3_collation_needed() 或 sqlite3_collation_needed16() 的第二個參數的副本。第二個參數是資料庫連線。第三個參數是 SQLITE_UTF8、SQLITE_UTF16BE 或 SQLITE_UTF16LE 之一,表示所需排序序列函式最理想的形式。第四個參數是所需排序序列的名稱。
回呼函式應該使用 sqlite3_create_collation()、sqlite3_create_collation16() 或 sqlite3_create_collation_v2() 註冊所需的排序方式。