See this example:
{{{
mysql> select version() as server_version\G
*************************** 1. row ***************************
server_version: 5.1.66-0+squeeze1-log
...
mysql> create table abc (value decimal(31,0));
...
mysql> insert into abc values (1234567890123456789012345678901);
Query OK, 1 row affected (0.00 sec)
mysql> select value from abc where value =
1234567890123456789012345678901\G
*************************** 1. row ***************************
value: 1234567890123456789012345678901
...
mysql> select value from abc where value =
'1234567890123456789012345678901'\G
Empty set (0.01 sec)
}}}
Obviously, a fix could be to upgrade to a newer MySQL server version --
the MySQL 5.5.28 I tested didn't have this issue -- but that isn't always
possible.
I suppose a workaround/fix might not be included in Django because the bug
lies in MySQL, but I'll file it here for the record.
Test cases are included:
{{{
FAIL: test_decimal_field_broken1 (test_long_decimal.tests.DecimalTests)
...
AssertionError: book with isbn 1234567890123456789012345678901 was not
found
}}}
I tried to work around the bug by surrounding a decimal value in lookup
with CAST(..), but that (sometimes!) triggers an SQL Warning (in other
tests!) instead:
{{{
ERROR: test_decimal_field_works1 (test_long_decimal.tests.DecimalTests)
...
Warning: Truncated incorrect DECIMAL value: ''
}}}
So, my easy fix did not work out as expected.
The proper fix, if any, would probably to force the backend to take the
decimal as an *unquoted* value. But I didn't find an easy path to achieve
that.
Regards,
Walter Doekes
OSSO B.V.
--
Ticket URL: <https://code.djangoproject.com/ticket/19625>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_docs: => 0
* needs_tests: => 0
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/19625#comment:1>
Comment (by wdoekes):
I added `django19625-master.fix_using_django_conversions.patch` which
seems to do the trick.
It was written by my colleague Harm Geerts (hgeerts).
--
Ticket URL: <https://code.djangoproject.com/ticket/19625#comment:2>
* has_patch: 0 => 1
* type: Uncategorized => Bug
--
Ticket URL: <https://code.djangoproject.com/ticket/19625#comment:3>
* status: new => closed
* resolution: => wontfix
Comment:
As MySQL 5.1 is End of life as of December 31, 2013, I think we should
close this.
--
Ticket URL: <https://code.djangoproject.com/ticket/19625#comment:4>