如何解决设置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)