mirror of
https://github.com/django/django.git
synced 2025-08-03 18:38:50 +00:00
Prevent Oracle from changing field.null to True
Fixed #17957 -- when using Oracle and character fields, the fields were set null = True to ease the handling of empty strings. This caused problems when using multiple databases from different vendors, or when the character field happened to be also a primary key. The handling was changed so that NOT NULL is not emitted on Oracle even if field.null = False, and field.null is not touched otherwise. Thanks to bhuztez for the report, ramiro for triaging & comments, ikelly for the patch and alex for reviewing.
This commit is contained in:
parent
e75bd7e51c
commit
584e2c0337
6 changed files with 57 additions and 16 deletions
|
@ -685,11 +685,11 @@ NULL and empty strings
|
|||
|
||||
Django generally prefers to use the empty string ('') rather than
|
||||
NULL, but Oracle treats both identically. To get around this, the
|
||||
Oracle backend coerces the ``null=True`` option on fields that have
|
||||
the empty string as a possible value. When fetching from the database,
|
||||
it is assumed that a NULL value in one of these fields really means
|
||||
the empty string, and the data is silently converted to reflect this
|
||||
assumption.
|
||||
Oracle backend ignores an explicit ``null`` option on fields that
|
||||
have the empty string as a possible value and generates DDL as if
|
||||
``null=True``. When fetching from the database, it is assumed that
|
||||
a ``NULL`` value in one of these fields really means the empty
|
||||
string, and the data is silently converted to reflect this assumption.
|
||||
|
||||
``TextField`` limitations
|
||||
-------------------------
|
||||
|
|
|
@ -55,9 +55,8 @@ string, not ``NULL``.
|
|||
|
||||
.. note::
|
||||
|
||||
When using the Oracle database backend, the ``null=True`` option will be
|
||||
coerced for string-based fields that have the empty string as a possible
|
||||
value, and the value ``NULL`` will be stored to denote the empty string.
|
||||
When using the Oracle database backend, the value ``NULL`` will be stored to
|
||||
denote the empty string regardless of this attribute.
|
||||
|
||||
If you want to accept :attr:`~Field.null` values with :class:`BooleanField`,
|
||||
use :class:`NullBooleanField` instead.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue