Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Browse files

Changed "exact" matches in MySQL to use the database's native collation.

This effectively reverses the change in [7798]. It was proving too difficult to
successfully manage all the side effects here and provide a satisfactory
solution for everybody. Many thanks to arne, Martin von Löwis and, particular,
Karen Tracey, for doing a lot of research and proto-patches here to establish what was possible and practical.

This is backwards incompatible if you were relying on the behaviour after
[7798]. The docs have been updated to indicate the solution.

Refs #2170, #7789, #8102.

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 6294fc7179011847d8a9f906cf4939ebf9852265 1 parent ca71eac
@malcolmt malcolmt authored
4 django/db/backends/mysql/
@@ -153,9 +153,9 @@ def year_lookup_bounds(self, value):
return [first % value, second % value]
class DatabaseWrapper(BaseDatabaseWrapper):
operators = {
- 'exact': '= BINARY %s',
+ 'exact': '= %s',
'iexact': 'LIKE %s',
'contains': 'LIKE BINARY %s',
'icontains': 'LIKE %s',
13 docs/db-api.txt
@@ -1327,6 +1327,19 @@ changed in the development version. Previously, it was (intentionally)
converted to ``WHERE id = NULL`` at the SQL level, which would never match
anything. It has now been changed to behave the same as ``id__isnull=True``.
+.. admonition:: MySQL comparisons
+ In MySQL, whether or not ``exact`` comparisons are case-sensitive depends
+ upon the collation setting of the table involved. The default is usually
+ ``latin1_swedish_ci`` or ``utf8_swedish_ci``, which results in
+ case-insensitive comparisons. Change the collation to
+ ``latin1_swedish_cs`` or ``utf8_bin`` for case sensitive comparisons.
+ For more details, refer to the MySQL manual section about `character sets
+ and collations`_.
+.. _character sets and collations:
6 tests/regressiontests/string_lookup/
@@ -97,12 +97,6 @@ def __str__(self):
>>> Article.objects.get(text__exact='The quick brown fox jumps over the lazy dog.')
<Article: Article Test>
-# Regression tests for #2170: test case sensitiveness
->>> Article.objects.filter(text__exact='tHe qUick bRown fOx jUmps over tHe lazy dog.')
->>> Article.objects.filter(text__iexact='tHe qUick bRown fOx jUmps over tHe lazy dog.')
-[<Article: Article Test>]
>>> Article.objects.get(text__contains='quick brown fox')
<Article: Article Test>

0 comments on commit 6294fc7

Please sign in to comment.
Something went wrong with that request. Please try again.