Reputation: 7218
In MySQL 8.0.12 running on Windows 10, it seems impossible to set lower_case_table_names
to 2, so as to achieve the appearance of mixed case DB and table names in Workbench. I realize that under the hood these objects may remain lower case, which is fine. But I want it to look right in Workbench, and I could always achieve this in previous versions of MySQL. When I attempt to do that and restart the service so it takes effect, the service crashes and stops. In the mysql logs I see this:
Different lower_case_table_names settings for server ('2') and data dictionary ('1').
Data Dictionary initialization failed.
This seems to be a common problem for a lot of people.
I read here that the solution is:
So
lower_case_table_names
needs to be set together with --initialize.
But I have no idea what that means, or how to set it at startup. I have googled all over and read several forum articles but I can't find clear instructions on how to resolve this.
Upvotes: 16
Views: 13936
Reputation: 7218
I figured it out. When installing MySQL Server 8.0.x, you have to check Show Advanced and Logging Options
...
...so that you can get to this screen:
Then you select Preserve Given Case, which is not the default. Hey MySQL developers: This setting should be on the main path, not buried in the optional advanced path.
===============================
Notes added on 9/25/2021:
- This
Preserve Given Case
option can only be selected on first-time installation. You cannot go back and choose it later. Editing the config file will only cause errors. Attempting to upgrade or modify the install results in readonly options for this item.- If you already have MySQL installed without this desired option, you'll need to completely uninstall it and reinstall it.
- As of MySQL 8.0.26, these steps are still valid.
===============================
Upvotes: 28
Reputation: 142356
8.0.11 changelog:
It is now prohibited to start the server with a lower_case_table_names setting that is different from the setting used when the server was initialized. The restriction is necessary because collations used by data dictionary table fields are based on the setting defined when the server is initialized, and restarting the server with a different setting would introduce inconsistencies with respect to how identifiers are ordered and compared. (Bug #27309094, Bug #89035)
See also: https://bugs.mysql.com/bug.php?id=89035
By --initialized, it is referring the initial install of 8.0. How was that done?
Upvotes: 8