mysql表名称区分大小写

时间:2014-02-03 19:45:29

标签: php mysql sql database

我在开发服务器上运行了一个网站,在那里我可以执行查询,如

SELECT * FROM Agents;
OR
SELECT * FROM agents;

我的意思是,它在两种情况下运行。但是,在我的生产服务器中,它给了我错误。 我该怎么做才能克服这个问题。因为我在我的php脚本中使用了大写和小写,无处不在。

ERROR:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]:
Base table or view not found: 1146 Table 'database_name.Agents' doesn't exist' 

2 个答案:

答案 0 :(得分:1)

您需要修改/etc/my.cnf并设置lower_case_table_names server variable

  • 打开MySQL配置文件:/etc/my.cnf
  • 查找:[mysqld]部分
  • 添加:lower_case_table_names = 2
  • 保存并重新启动MySQL服务:/etc/init.d/mysql restart

如果 lower_case_table_names 设置为0,则表名称将按指定存储,并且比较区分大小写。如果设置为1,则表名称以小写形式存储在磁盘上,并且比较不区分大小写。 如果设置为2,则表名存储为给定但以小写进行比较。此选项也适用于数据库名称和表别名。

答案 1 :(得分:0)

您的开发服务器是在Windows还是Mac上? Linux上的Mysql默认情况下具有区分大小写的表名,而Windows和Mac则没有。为了在所有系统之间实现最佳兼容性,我建议始终保持外壳一致。

不幸的是,我建议你在所有脚本中修复它。如果您可以在生产服务器上禁用区分大小写,那就太好了,但如果您迁移到其他系统或在无法控制生产设置的系统上工作,那么最好采用编码实践来假设它区分大小写