Python SQLite:强制UTF-8编码



我正在开发一个跨平台Python(3.7+(应用程序,我需要依赖SQLite中TEXT列的排序顺序,这意味着TEXT值的比较算法必须基于UTF-8字节。即使系统编码(sys.getdefaultencoding()(不是utf-8

但是在sqlite3模块的文档中,我找不到sqlite3.connect的编码选项。

我读到sys.setdefaultencoding("utf-8")的使用是一种丑陋的黑客攻击,非常令人沮丧(这就是为什么我们需要在调用它之前使用reload(sys)(

那么解决方案是什么呢?

查看Python的_sqlite/connection.c代码,会调用sqlite3_open_v2sqlite3_open(取决于编译标志(。基于sqlite-doc,两者都使用UTF-8作为默认的数据库编码。我仍然不确定";默认";因为它没有提到任何覆盖它的方法!但我觉得Python不能用另一种编码打开。

#ifdef SQLITE_OPEN_URI
Py_BEGIN_ALLOW_THREADS
rc = sqlite3_open_v2(database, &self->db,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
(uri ? SQLITE_OPEN_URI : 0), NULL);
#else
if (uri) {
PyErr_SetString(pysqlite_NotSupportedError, "URIs not supported");
return -1;
}
Py_BEGIN_ALLOW_THREADS
rc = sqlite3_open(database, &self->db);
#endif

最新更新