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: http://code.djangoproject.com/svn/django/trunk@8319 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
ca71eacdf4
commit
6294fc7179
|
@ -153,9 +153,9 @@ class DatabaseOperations(BaseDatabaseOperations):
|
||||||
return [first % value, second % value]
|
return [first % value, second % value]
|
||||||
|
|
||||||
class DatabaseWrapper(BaseDatabaseWrapper):
|
class DatabaseWrapper(BaseDatabaseWrapper):
|
||||||
|
|
||||||
operators = {
|
operators = {
|
||||||
'exact': '= BINARY %s',
|
'exact': '= %s',
|
||||||
'iexact': 'LIKE %s',
|
'iexact': 'LIKE %s',
|
||||||
'contains': 'LIKE BINARY %s',
|
'contains': 'LIKE BINARY %s',
|
||||||
'icontains': 'LIKE %s',
|
'icontains': 'LIKE %s',
|
||||||
|
|
|
@ -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
|
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``.
|
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: http://dev.mysql.com/doc/refman/5.0/en/charset.html
|
||||||
|
|
||||||
iexact
|
iexact
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -97,12 +97,6 @@ __test__ = {'API_TESTS': ur"""
|
||||||
>>> Article.objects.get(text__exact='The quick brown fox jumps over the lazy dog.')
|
>>> Article.objects.get(text__exact='The quick brown fox jumps over the lazy dog.')
|
||||||
<Article: Article Test>
|
<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.objects.get(text__contains='quick brown fox')
|
||||||
<Article: Article Test>
|
<Article: Article Test>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue