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