我的数据库中有一个具有以下值的用户:
booking_id -> 25DgW
此字段在我的模型中被标记为唯一
booking_id = models.CharField(null=False, unique=True, max_length=5, default=set_booking_id)
但是现在当我像这样查询用户时:
>>> User.objects.get(booking_id='25dgw') # I think this should throw a DoesNotExist exacption
<User: John Doe>
即使我这样做:
>>> Partner.objects.get(booking_id__exact='25dgw')
<User: John Doe>
我需要一个查询,仅当代码的编写方式与数据库中保存的方式完全相同时才返回用户:25DgW
而不是25dgw
。
如何查询?
最佳答案
默认情况下,MySQL 不考虑字符串的大小写。将有一个与数据库/表或列关联的字符集和排序规则。
字符集latin1的默认排序规则为latin1_swedish_ci,不区分大小写。您必须将排序规则类型更改为支持区分大小写比较的latin1_general_cs
。
您可以在数据库/表/列级别更改字符集/排序规则设置。
以下步骤对我有用。
进入 MySQL shell
mysql -u user -p 数据库名
更改表/列的字符集和排序规则类型
ALTER TABLE tablename CONVERT TO CHARACTER SET latin1 COLLATE latin1_general_cs;
现在尝试查询
Partner.objects.get(booking_id__exact='25dgw')
这会引发错误,表匹配查询不存在。
关于mysql - Django - 查询精确的字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34047992/