Opened 9 years ago
Last modified 9 years ago
#27321 closed Bug
ignores_quoted_identifier_case broken on MySQL on OS X/Windows — at Version 1
| Reported by: | Adam Johnson | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.10 |
| Severity: | Normal | Keywords: | mysql, mariadb |
| Cc: | me@… | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
#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.