我正在使用遗留的PHP框架,它自动为我组装查询。由于某种原因,它正在组装这样的查询:
SELECT s.status,c.client FROM client C LEFT JOIN status S ON C.id_status=S.id_status'
这在我的MacOS X工作站上不是问题。但是当我在生产服务器上测试它时,mysql会引发以下错误:
#1054 - Unknown column 's.status' in 'field list'
这绝对是s.status的一个案例问题。如果我手动运行查询更改s,c为S,C,它可以正常运行。
快速浏览谷歌并没有解决问题。有什么想法吗?
答案 0 :(得分:1)
嗯,据说documentation:
默认情况下,表别名在Unix上区分大小写,但不是这样 Windows或Mac OS X.以下语句不适用于Unix, 因为它将别名称为a和A:
mysql> SELECT col_name FROM tbl_name AS a
-> WHERE a.col_name = 1 OR A.col_name = 2;
本文档的这一部分也提供了一些解决方案。例如,您可以在所有平台上将lower_case_table_names
设置为1
以强制将名称转换为小写 - 但在这种情况下,您还必须将所有表重命名为小写。
答案 1 :(得分:0)
MySQL中的表存储为文件。文件名在MacOS X和Windows中不区分大小写,而在Linux中它们区分大小写。您可以在MacOS X和Windows中使用表名而不考虑大小写,但在Linux中则不行。因此,您应为所有表名选择一致的大小写,并在整个代码中使用它。
我建议使用以tbl_etc
,MY_TBL
等下划线分隔的所有小写或大写名称,这样就不会有关于大小写的混淆。