Opened 4 years ago
Closed 4 years ago
#32300 closed Bug (wontfix)
"BIGINT UNSIGNED value is out of range" occurs when substraction operation between PositiveBigIntegerField and BigIntegerField using F()
Reported by: | jun | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 3.1 |
Severity: | Normal | Keywords: | mysql unsigned |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
- Environment
MacOS 10.15.3 Django 3.1 MySQL 5.7.32 mysqlclient==2.0.1
- Model
class SomeModel(models.Model): positive_big_int_column = models.PositiveBigIntegerField(default=0) big_int_column = models.BigIntegerField(default=0)
- Test
SomeModel.objects.create(positive_big_int_column=100, big_int_column=300) qs = SomeModel.objects.filter(positive_big_int_column=100) qs.update(big_int_column=F('positive_big_int_column') - F('big_int_column'))
- Expected query
UPDATE SomeModel SET big_int_column=(100-300)
- Error
IntegrityError: (1690, "BIGINT UNSIGNED value is out of range in blabla")
Change History (2)
comment:1 by , 4 years ago
Description: | modified (diff) |
---|
comment:2 by , 4 years ago
Keywords: | mysql unsigned added; F expression removed |
---|---|
Resolution: | → wontfix |
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
It can be worked around by using an explicit
Cast
expressionBut you risk data corruption if
positive_big_int_column
is larger than what MySQL allows storing an a signedbigint
. PostgreSQL and Oracle backends don't suffer from that as they implementPositiveBigIntegerField
using a check constraint. SQLite simply have an integer type without constraints at all so it's also not affected.I'll close as wontfix as it's really just a MySQL quirk due to the usage of
UNSIGNED
data types to implementPositiveIntegerField
variants. I guess there isn't much that can be done until we drop support for MySQL < 8 since the latter introducesCHECK
constraints support.