roc*_*zen 15 mysql linux case-insensitive
我正在开发一个曾经托管在Apple服务器上的旧网站.当它迁移到新的Linux服务器时,它停止工作.我很确定这是因为php脚本中使用的所有MySQL查询都有不同的表名组合(我不知道为什么原始开发人员在创建表名或php脚本时没有遵循任何约定并且它没关系,因为默认情况下Mac和Windows MySQL服务器都不区分大小写.但是,Linux不是.
有没有办法改变MySQL上的Linux默认值,使它变得不区分大小写,它的工作方式与Mac或Windows类似?我一直在寻找,但没有找到任何不涉及更改脚本或表名或两者的答案.该网站必须使用某些CMS生成,因此有数十个页面,并且包含每个和多个表中包含多个查询的文件.我开始尝试以我能想到的最聪明的方式实现这种类型的解决方案,但如果我触摸表名,那么其他当前工作的页面就会停止工作(我试图避免进一步破坏网站).
Linux服务器中的Webmin中的MySQL服务器控制台中有一个系统变量(lower_case_table_names)我可以将其从0更改为1以解决此问题,但Webmin不会让我更改它,因为它是"只读" "变量.
你认为这将是一个很容易解决的问题,但到目前为止我失去了希望.我希望有人能得到一个答案,此刻可能会让我感到困惑.
Kev*_*vin 18
默认情况下,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
导语:
如果设置为0,则表名称按指定存储,并且比较区分大小写.如果设置为1,则表名称以小写形式存储在磁盘上,并且比较不区分大小写.如果设置为2,则表名称将按给定方式存储,但会以小写形式进行比较.此选项也适用于数据库名称和表别名.有关其他信息,请参见第9.2.2节"标识符区分大小写".
如果在具有不区分大小写的文件名(例如Windows或Mac OS X)的系统上运行MySQL,则不应将此变量设置为0.如果在此类系统上将此变量设置为0并使用不同的字母表访问MyISAM表名,则可能会导致索引损坏.在Windows上,默认值为1.在Mac OS X上,默认值为2.
所以会出现你应该设置lower_case_table_names
到1
在MySQL配置文件.
thk*_*ala 13
有一个名称相同的MySQL服务器变量.您可能需要在系统启动时设置该特定变量,如本帮助页面中所述.您必须找到/etc/my.cnf
您的数据库服务器实例的MySQL选项文件(我的位置)的位置,并编辑/添加此选项到该[mysqld]
部分.
不要忘记之后重启MySQL守护进程......
Séb*_*ien 10
编辑mysql配置文件
nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
或任何其他my.cnf
用于配置您的文件mysql
.
下
[mysqld]
Run Code Online (Sandbox Code Playgroud)
添加线
lower_case_table_names=1
Run Code Online (Sandbox Code Playgroud)
跑
sudo service mysqld restart
Run Code Online (Sandbox Code Playgroud)
您可能希望将Windows数据库重新导入Linux数据库.最好从头开始,添加表和插入语句.
很好!
当 mysql 运行时,您无法更改 的值lower_case_table_names
- 它需要在启动时设置。您将需要编辑my.cnf
(也许在/etc
,也许在其他地方,不确定)。然后重启mysql就可以了。