From 584e2c03376895aeb0404cc1fcc1ad24dfdbc58e Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Sun, 29 Apr 2012 19:25:46 +0300 Subject: 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. --- docs/ref/databases.txt | 10 +++++----- docs/ref/models/fields.txt | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'docs') diff --git a/docs/ref/databases.txt b/docs/ref/databases.txt index 8fbe4125c9..2dea337d2b 100644 --- a/docs/ref/databases.txt +++ b/docs/ref/databases.txt @@ -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 ------------------------- diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt index d1f12ffc95..eab7ad91e1 100644 --- a/docs/ref/models/fields.txt +++ b/docs/ref/models/fields.txt @@ -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. -- cgit v1.3