我在开发服务器上运行了一个网站,在那里我可以执行查询,如
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'
答案 0 :(得分:1)
您需要修改/etc/my.cnf
并设置lower_case_table_names server variable。
/etc/my.cnf
[mysqld]
部分/etc/init.d/mysql restart
如果 lower_case_table_names 设置为0,则表名称将按指定存储,并且比较区分大小写。如果设置为1,则表名称以小写形式存储在磁盘上,并且比较不区分大小写。 如果设置为2,则表名存储为给定但以小写进行比较。此选项也适用于数据库名称和表别名。
答案 1 :(得分:0)
您的开发服务器是在Windows还是Mac上? Linux上的Mysql默认情况下具有区分大小写的表名,而Windows和Mac则没有。为了在所有系统之间实现最佳兼容性,我建议始终保持外壳一致。
不幸的是,我建议你在所有脚本中修复它。如果您可以在生产服务器上禁用区分大小写,那就太好了,但如果您迁移到其他系统或在无法控制生产设置的系统上工作,那么最好采用编码实践来假设它区分大小写