On Mon, Sep 22, 2008 at 2:29 PM, tcp <[EMAIL PROTECTED]> wrote: > > Hi, > > Getting started. > > I've got a MySQL database running on Windows (MySQL on Windows is not > case sensitive) > > I create a model called People which has a Class called Person. >
Your terminology is confusing here. I think you are saying you have a Django application (i.e. directory containing models.py, etc.) named 'People' with a Django model named Person. It is a little odd to have an uppercase letter in your directory name, and that is what is causing the problem. > > I sync the database and it creates a table "people_person" > Django actually creates a table named 'People_person'. Django lowercases the part of the name that comes from your model's class name, but not the part that comes from your application directory name. The lowercasing of 'people' is coming from MySQL, as described here: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html assuming you are using the default setting of 1 for lower_case_table_names on Windows. > If I immediately run syncdb again, it errors out with: > > Creating table People_person > Traceback (most recent call last): > File "manage.py", line 11, in <module> > . > . > . > raise errorclass, errorvalue > _mysql_exceptions.OperationalError: (1050, "Table 'people_person' > already exists > ") > > > Notice that it doesn't think that People_person exists because it is > using a case sensitive search in Python and then it attempts to create > the table which FAILS in the case insensitive Windows MySQL. > On a syncdb, Django retrieves the existing table names from the DB. It gets back 'people_person', which does not match the table it wants to create, which is 'People_person', so it tries to create 'People_person'. However MySQL lowercases the entire thing and now it matches an exising table so the create fails. > I'm looking at a book that advises setting uses_case_insensitive_name > = True in the django/db/backends/__init__py file....but this doesn't > seem to work. > I have no idea what book you are referring to here nor what that setting is supposed to affect. However, if a book recommends changing the Django source to fix a problem like this I'd be a bit leery of following any of its advice. In general Django accomodates various databases and platforms without requiring any fiddling with the source. Unless you are sure you understand all the issues and have come to the conclusion through your own research that for some reason Django out of the box doesn't work properly for your environment (in which ase I'd hope you'd bring it up as an issue to be addressed by the Django developers), it's a bad idea to be changing things in the Django code. > This seems like a bug to me in the MySQL implementation. Can someone > suggest the best way to work around this problem or to set the db case > insensitivity.... > You could -- 1. set lower_case_table_names to 0 on your MySQL implementation. That way MySQL won't gratuitiously lowercase the names that Django passes to it. If you are concerned about the scary-sounding warning about corrupt indexes that can result from this being set to 0 if you then also access the tables with a different lettercase, you could instead: 2 - specify an all-lowercase db_table name in the Meta class of your Person model. See the docs here: http://docs.djangoproject.com/en/dev/ref/models/options/#db-table. Or: 3 - avoid using uppercase letters in your Djano application names. Karen --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---

