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*) );
为了避免必须在使用数据库之前注册所有排序序列,可以在 数据库连接 上注册单个回调函数,以便在需要未定义的排序序列时调用。
如果使用 sqlite3_collation_needed() API 注册函数,则会将未定义排序序列的名称作为 UTF-8 编码的字符串传递给它。如果使用 sqlite3_collation_needed16(),则名称将作为机器原生字节顺序的 UTF-16 传递。对任一函数的调用都会替换现有的排序需求回调。
当回调被调用时,传递的第一个参数是 sqlite3_collation_needed() 或 sqlite3_collation_needed16() 的第二个参数的副本。第二个参数是数据库连接。第三个参数是 SQLITE_UTF8、SQLITE_UTF16BE 或 SQLITE_UTF16LE 之一,表示所需排序序列函数的最优形式。第四个参数是所需排序序列的名称。
回调函数应该使用 sqlite3_create_collation()、sqlite3_create_collation16() 或 sqlite3_create_collation_v2() 注册所需的排序。