如何强制Django进行区分大小写的比较?

问题描述:

由于数据库整理的方式,他们忽略了用户名和密码的情况,我们目前无法在数据库级别修复这些用户名和密码。看来从this threadWHERE BINARY 'something' = 'Something'应该解决的问题,但我一直没能找出让Django的插入BINARY。有小费吗?如何强制Django进行区分大小写的比较?

+0

正如一个侧面说明,你不应该在数据库中存储的密码,而无需通过'sha1'或其他一些散列函数运行它们。 – Kaivosukeltaja

+0

好点,但我们仍然需要区分用户名的大小写。 – exupero

+0

可能重复[你能在Sqlite3(使用Django)实现不区分大小写'唯一'约束吗?](http://*.com/questions/276656/can-you-achieve-a-case-insensitive-unique-约束在-sqlite3的与 - 的Django) – CharlesB

我不认为有一个简单的方法来强制Django的加点东西到一个查询的内容。

你可能想简单地写一个raw SQL query Django的内获得与区分大小写的比较过滤的对象,然后在正常查询中使用它们。

另一种方法是,以达到相同的结果使用Django区分大小写的过滤器。例如。 contains/startswith都使用BINARY LIKE和而比较两个字符串以相同的长度(例如密码散列))可以被使用。最后,您可以使用regexp进行区分大小写的比较。但在这种情况下,这些方法相当丑陋。他们有一个不必要的开销,只要有可能,你应该避开它们。