Mysql查询的区分大小写问题

时间:2012-10-03 22:11:33

标签: php mysql sql

我正在使用遗留的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,它可以正常运行。

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

2 个答案:

答案 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_etcMY_TBL等下划线分隔的所有小写或大写名称,这样就不会有关于大小写的混淆。