1

我正在使用一个遗留的 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 的查询,它将完美运行。

快速浏览谷歌并没有解决问题。有任何想法吗?

4

2 回答 2

1

好吧,文档中说:

默认情况下,表别名在 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_names1强制将名称转换为小写 - 但在这种情况下,您也必须将所有表重命名为小写。

于 2012-10-03T22:17:53.517 回答
0

MySQL 中的表存储为文件。文件名在 MacOS X 和 Windows 中不区分大小写,而在 Linux 中则区分大小写。您可以在 MacOS X 和 Windows 中使用表名而不考虑大小写,但在 Linux 中则不行。因此,您应该为所有表名选择一致的大小写,并在整个代码中使用它。

我建议使用用下划线分隔的所有小写或大写名称,例如tbl_etcMY_TBL等,这样就不会混淆大小写。

于 2012-10-03T22:18:51.783 回答