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
This commit is contained in:
Russell Keith-Magee 2011-09-10 20:06:10 +00:00
parent dafb4951a7
commit 8d6c251731
3 changed files with 28 additions and 8 deletions

View File

@ -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
------------------------

View File

@ -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``
-----------------

View File

@ -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
#