如何更改Linux服务器中的MySQL表名是不区分大小写的?

我正在一个曾经在苹果服务器上托pipe的旧网站上工作。 当它被迁移到新的Linux服务器时,它停止工作。 我敢肯定,这是因为在PHP脚本中使用的所有MySQL查询具有不同的表名组合(我不知道为什么原始开发人员在创build表名或PHP脚本时没有遵循任何约定)并不重要,因为默认情况下,Mac和Windows MySQL服务器都是不区分大小写的。 但是,Linux不是。

有没有办法改变MySQL的Linux默认,所以它变得不区分大小写,它可以像Mac或Windows一样工作? 我一直在寻找,但还没有find任何不涉及改变脚本或表名或两者的答案。 该网站必须已经使用一些CMS生成,因此在几十页上有数十个文件,并且在每个和数百个表中包含具有多个查询的文件。 我开始尝试以我能想到的最聪明的方式实现这种types的解决scheme,但是如果我触摸表名称,那么其他当前工作的页面就停止工作(我试图避免进一步破坏网站)。

在Linux服务器的Webmin中,MySQL服务器控制台中有一个系统variables(lower_case_table_names),我可以将其从0更改为1来解决这个问题,但Webmin不会让我改变它,因为它是“只读“可变。

你会认为这将是一个容易解决的问题,但到目前为止,我正在失去希望。 我希望有人得到一个答案,目前可能没有。

Solutions Collecting From Web of "如何更改Linux服务器中的MySQL表名是不区分大小写的?"

MySQL的大小写敏感性默认由文件系统处理,这就是为什么你发现这种差异:

9.2.2。 标识符区分大小写

在MySQL中,数据库对应于数据目录中的目录。 数据库中的每个表对应于数据库目录中的至少一个文件(并且可能更多,取决于存储引擎)。 因此,底层操作系统的区分大小写在数据库和表名的区分大小写的情况下起作用。 这意味着数据库和表名在Windows中不区分大小写,并且在大多数Unix中区分大小写。 一个明显的例外是Mac OS X,它是基于Unix的,但使用不区分大小写的默认文件系统类型(HFS +)。 但是,Mac OS X也支持UFS卷,与任何Unix一样区分大小写。 请参见第1.8.4节“MySQL扩展到标准SQL”。

幸运的是,下一句可以帮助你:

lower_case_table_names系统变量也会影响服务器如何处理标识符区分大小写,如本节后面所述。

lower_case_table_names blurb:

如果设置为0,则表名按指定进行存储,并且比较区分大小写。 如果设置为1,表名将以小写形式存储在磁盘上,并且比较不区分大小写。 如果设置为2,则表名按给定方式存储,但以小写字母进行比较。 该选项也适用于数据库名称和表别名。 有关更多信息,请参见第9.2.2节“标识符大小写敏感性”。

如果您在具有不区分大小写的文件名(例如Windows或Mac OS X)的系统上运行MySQL,则不应将此变量设置为0。 如果在此类系统上将此变量设置为0,并使用不同的字母表访问MyISAM表名,则可能导致索引损坏。 在Windows上,默认值是1.在Mac OS X上,默认值是2。

所以你应该在MySQL配置文件中设置lower_case_table_names1

有一个同名的MySQL服务器变量 。 您可能需要在系统启动时设置该特定变量,如本帮助页面所述 。 您将不得不为您的数据库服务器实例找到MySQL选项文件的位置(我的位于/etc/my.cnf ),并编辑/添加此选项到[mysqld]部分。

之后不要忘记重启MySQL守护进程

编辑mysql配置文件

 nano /etc/mysql/my.cnf 

或任何其他my.cnf文件是用来配置您的mysql

 [mysqld] 

添加行

 lower_case_table_names=1 

 sudo service mysqld restart 

您可能想要将您的Windows数据库重新导入到您的Linux数据库中。 最好从头开始,添加表和插入语句。

这很好!

在运行mysql时,不能更改lower_case_table_names的值 – 它需要在启动时设置。 你将需要编辑my.cnf (也许在/etc ,也许在其他地方,不知道)。 然后重新启动MySQL,你应该是好的。

在创建数据库实例之前,应将lower_case_table_names参数设置为自定义数据库参数组的一部分。 您应该避免更改现有数据库实例的lower_case_table_names参数,因为这样做可能会导致与时间点恢复备份和只读副本数据库实例的不一致。