如何解决设置lower_case_table_names = 0时无法连接到'localhost'(10061)上的MySQL服务器?

Posted

技术标签:

【中文标题】如何解决设置lower_case_table_names = 0时无法连接到\'localhost\'(10061)上的MySQL服务器?【英文标题】:How to solve Can't connect to MySQL server on 'localhost' (10061) when setting lower_case_table_names=0?如何解决设置lower_case_table_names = 0时无法连接到'localhost'(10061)上的MySQL服务器? 【发布时间】:2020-08-07 05:08:29 【问题描述】:

mysql 中创建表时,我注意到我的所有表名都以小写开头,即使我用大写命名它们也是如此。

我发现进入:

C:\ProgramData\MySQL\MySQL 服务器 8.0

打开 my.ini 文件并更改 lower_case_table_names=0

会根据this video 来解决问题。

完成上述操作后,我关闭了服务器,重新启动了电脑 并且在尝试再次启动服务器时出现以下错误:

无法连接,服务器可能没有运行。无法连接到 MySQL 'localhost' (10061) 上的服务器

当我改回lower_case_table_names=1

它再次工作。我该如何解决?

编辑:

我发现我可以通过

更改属性,而不是进入 ini 文件

选项文件

然后在常规选项卡下我找到lower_case_table_names并将其更改为0

但又是同样的错误。

【问题讨论】:

可能第一个答案都是相关的——操作系统在处理文件名方面的差异导致了 8.0 之前对标志的需求。 8.0 通过将表名存储在内部 InnoDB 数据库(新的“数据字典”)中添加到该问题。 【参考方案1】:

你可以在这里阅读https://bugs.mysql.com/bug.php?id=89035

自 8.0.5 起

现在禁止使用 lower_case_table_names 启动服务器 与服务器运行时使用的设置不同的设置 初始化。该限制是必要的,因为使用的排序规则 各种数据字典表字段基于时定义的设置 服务器已初始化,并以不同的方式重新启动服务器 设置会引入关于标识符如何的不一致 排序和比较。

禁止这样做,导致服务无法启动。

【讨论】:

【参考方案2】:

我建议您为此配置使用值 2,因为您尝试在 Windows 机器上使用 0,这可能会导致您的数据库表出现问题,基于 windows/Mac OS 的 documentation值0的用法:

表和数据库名称使用字母大小写存储在磁盘上 在 CREATE TABLE 或 CREATE DATABASE 语句中指定。姓名 比较区分大小写。 您不应将此变量设置为 0 如果您在具有不区分大小写文件的系统上运行 MySQL 名称(例如 Windows 或 macOS)。如果你强制这个变量为 0 --lower-case-table-names=0 在不区分大小写的文件系统上使用不同的字母大小写访问 MyISAM 表名,索引损坏 可能会导致。

在链接文档中的值2 可以解决您的问题,它会以您使用的相同名称将表存储在磁盘上,在这种情况下查找将不区分大小写:

表和数据库名称使用字母大小写存储在磁盘上 在 CREATE TABLE 或 CREATE DATABASE 语句中指定,但 MySQL 在查找时将它们转换为小写。名称比较不是大小写 敏感的。这仅适用于不支持的文件系统 区分大小写! InnoDB 表名和视图名存储在 小写,如 lower_case_table_names=1。

【讨论】:

以上是关于如何解决设置lower_case_table_names = 0时无法连接到'localhost'(10061)上的MySQL服务器?的主要内容,如果未能解决你的问题,请参考以下文章

大开测试:性能-如何解决由于设置引起的运行失败问题(连载22)

如何解决“将标头发送到客户端后无法设置标头”

如何在命令行下设置默认的Python版本?(已解决)

jsp页面多次通过attr设置属性失败如何解决

如何解决 myModel 变量中的 UserDefaults 设置错误?

如何解决 Django 中的“请求设置 INSTALLED_APPS,但未配置设置。”错误?