summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-09-10 20:06:10 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-09-10 20:06:10 +0000
commit8d6c2517315660fbf9e69ae6b7595f33a10e5e43 (patch)
tree87533aeb8567bc0770addc7abc0c050f40bd45ee
parentdafb4951a7ff191f1b41146ca46b4cc662212997 (diff)
Fixed #16592 -- More test changes and documentation to account for MySQL's casual relationship with sanity. Thanks to Jim Dalton for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16787 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--docs/ref/databases.txt13
-rw-r--r--docs/ref/models/options.txt7
-rw-r--r--tests/modeltests/unmanaged_models/models.py16
3 files changed, 28 insertions, 8 deletions
diff --git a/docs/ref/databases.txt b/docs/ref/databases.txt
index d9ea008521..24f5bee0d0 100644
--- a/docs/ref/databases.txt
+++ b/docs/ref/databases.txt
@@ -326,6 +326,19 @@ storage engine, you have a couple of options.
.. _AlterModelOnSyncDB: http://code.djangoproject.com/wiki/AlterModelOnSyncDB
+Table names
+-----------
+
+There are `known issues`_ in even the latest versions of MySQL that can cause the
+case of a table name to be altered when certain SQL statements are executed
+under certain conditions. It is recommended that you use lowercase table
+names, if possible, to avoid any problems that might arise from this behavior.
+Django uses lowercase table names when it auto-generates table names from
+models, so this is mainly a consideration if you are overriding the table name
+via the :class:`~django.db.models.Options.db_table` parameter.
+
+.. _known issues: http://bugs.mysql.com/bug.php?id=48875
+
Notes on specific fields
------------------------
diff --git a/docs/ref/models/options.txt b/docs/ref/models/options.txt
index cf1b3f97e4..010d93d9a3 100644
--- a/docs/ref/models/options.txt
+++ b/docs/ref/models/options.txt
@@ -61,6 +61,13 @@ If your database table name is an SQL reserved word, or contains characters that
aren't allowed in Python variable names -- notably, the hyphen -- that's OK.
Django quotes column and table names behind the scenes.
+.. admonition:: Use lowercase table names for MySQL
+
+ It is strongly advised that you use lowercase table names when you override
+ the table name via ``db_table``, particularly if you are using the MySQL
+ backend. See the :ref:`MySQL notes <mysql-notes>` for more details.
+
+
``db_tablespace``
-----------------
diff --git a/tests/modeltests/unmanaged_models/models.py b/tests/modeltests/unmanaged_models/models.py
index bfbd5447f2..00303cf17a 100644
--- a/tests/modeltests/unmanaged_models/models.py
+++ b/tests/modeltests/unmanaged_models/models.py
@@ -12,7 +12,7 @@ class A01(models.Model):
f_b = models.IntegerField()
class Meta:
- db_table = 'A01'
+ db_table = 'a01'
def __unicode__(self):
return self.f_a
@@ -23,7 +23,7 @@ class B01(models.Model):
f_b = models.IntegerField()
class Meta:
- db_table = 'B01'
+ db_table = 'b01'
# 'managed' is True by default. This tests we can set it explicitly.
managed = True
@@ -31,12 +31,12 @@ class B01(models.Model):
return self.f_a
class C01(models.Model):
- mm_a = models.ManyToManyField(A01, db_table='D01')
+ mm_a = models.ManyToManyField(A01, db_table='d01')
f_a = models.CharField(max_length=10, db_index=True)
f_b = models.IntegerField()
class Meta:
- db_table = 'C01'
+ db_table = 'c01'
def __unicode__(self):
return self.f_a
@@ -49,7 +49,7 @@ class A02(models.Model):
f_a = models.CharField(max_length=10, db_index=True)
class Meta:
- db_table = 'A01'
+ db_table = 'a01'
managed = False
def __unicode__(self):
@@ -57,7 +57,7 @@ class A02(models.Model):
class B02(models.Model):
class Meta:
- db_table = 'B01'
+ db_table = 'b01'
managed = False
fk_a = models.ForeignKey(A02)
@@ -75,7 +75,7 @@ class C02(models.Model):
f_b = models.IntegerField()
class Meta:
- db_table = 'C01'
+ db_table = 'c01'
managed = False
def __unicode__(self):
@@ -86,7 +86,7 @@ class Intermediate(models.Model):
c02 = models.ForeignKey(C02, db_column="c01_id")
class Meta:
- db_table = 'D01'
+ db_table = 'd01'
managed = False
#