#27321: ignores_quoted_identifier_case broken on MySQL on OS X/Windows
-------------------------------------+-------------------------------------
     Reporter:  Adam Chainz          |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  1.10
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:  mysql, mariadb       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Adam Chainz):

 * needs_better_patch:   => 0
 * needs_tests:   => 0
 * needs_docs:   => 0


Old description:

> #26781 added `test_alter_db_table_case` which presumes that table names
> are case sensitive. MySQL and MariaDB rely on the underlying filesystem
> to provide case sensitivity, as well as a setting, as per
> https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html
> and https://mariadb.com/kb/en/mariadb/identifier-case-sensitivity/ . Thus
> it fails on OS X where the default filesystem is case insensitive, with:
>
> {{{
> django.db.utils.InternalError: (1050, "Table 'SCHEMA_AUTHOR' already
> exists")
> }}}
>
> I can't find any good information on whether PostgreSQL depends on
> filesystem case sensitive or not. All the results I found in five minutes
> of Googling seem to relate to whether it's syntactically case sensitive,
> and suggest it lowercases all table names in queries unless they are
> double-quoted, which would make renaming a table to uppercase a no-op.
>
> This would mean `ignores_quoted_identifier_case` should be `True` for
> MySQL with its data directory mounted on a case insensitive filesystem.
> The only way to reliably check this would be to try create two tables
> with names that differ only in case and seeing if the second one failed..

New description:

 #26781 added the `ignores_quoted_identifier_case` database feature, which
 defaults to `False`, so it's `False` for the MySQL backend. Unfortunately
 this can't be determined without reference to the filesystem that the
 tables are stored on - MySQL and MariaDB rely on the underlying filesystem
 to provide case sensitivity, as well as a setting, as per
 https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html
 and https://mariadb.com/kb/en/mariadb/identifier-case-sensitivity/ .

 Thus the added test, `test_alter_db_table_case`, fails on OS X where the
 default filesystem is case insensitive, with:

 {{{
 django.db.utils.InternalError: (1050, "Table 'SCHEMA_AUTHOR' already
 exists")
 }}}

 I can't find any good information on whether PostgreSQL depends on
 filesystem case sensitive or not. All the results I found in five minutes
 of Googling seem to relate to whether it's syntactically case sensitive,
 and suggest it lowercases all table names in queries unless they are
 double-quoted, which would make renaming a table to uppercase a no-op
 anyway?

 `ignores_quoted_identifier_case` should be `True` for MySQL when its data
 directory is mounted on a case insensitive filesystem. The only way to
 reliably check this that I can think of would be to try create two tables
 with names that differ only in case and seeing if the second one failed,
 which is kind of nasty.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/27321#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/068.7d5da8c93359a35ce1b0947d1399f040%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to