Total Pageviews

Friday 12 October 2012

LINUX下,Mysql区分大小写的问题

要将禅道(zentaopms)从Windows下迁移到Centos下,但是迁移过去以后问题多多,要么就是点击登录以后一直为稍等,要么就是空白页面,还可能出现的情况就是能进去系统,但是点击某些模块的时候会出现空白页面。这个问题纠结了我一天时间,始终找不出原因。后来终于找到原因,是因为Mysql区分大小写的问题。而我导出的sql文件中所有的表名都是小写。

在此记录两种解决方案:

1.更改数据库中的表名(只针对禅道)

     要更改那些表名呢,请查看禅道安装目录config文件夹下的config.php文件,这个文件中包含表名,请根据这个文件中的表名使用phpmyadmin恰当的将数据库中的表名改为大写。

2.修改Mysql设置(通用设置,极力推荐)

    修改linux服务器下Mysql的设置需要用root登录系统后,编辑/etc/my.cnf这个文件,在[mysqld]后添加lower_case_table_names=1,重启MYSQL服务,这样做以后将不区分表名的大小写。

解释:

在Windows和Mac OS X中,lower_case_tables_name的 默认值是1。

如果只在一个平台上使用MySQL,通常不需要更改lower_case_tables_name变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到困难。例如,在Unix中,my_tables和MY_tables是两个不同的表,但在Windows中,这两个表名相同。要想避免由于数据库或表名的大小写造成的数据转移问题,可使用两个选项:

        在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不出名字原来是用大写还是小写。

        在Unix中使用lower_case_tables_name=0,在Windows中使用lower_case_tables_name=2。这样了可以保留数据库名和表名的大小写。不利之处是必须确保在Windows中查询总是用正确大小写引用数据库名和表名。如果将查询转移到Unix中,由于在Unix中大小写很重要,如果大小写不正确,它们不工作。

例外:如果你正使用InnoDB表,在任何平台上均应将lower_case_tables_name设置为1,以强制将名转换为小写。

请注意在Unix中将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写。