我的理解是SQL标准要求不区分大小写。 但我不相信任何数据库完全符合标准。
对于区分大小写或不敏感的表名,MySQL有一个配置设置作为其“严格模式”(一些使MySQL更符合标准的设置)的一部分。 无论此设置如何,列名仍然不区分大小写,但我认为它会影响列名的显示方式。 我相信这个设置是整个实例范围的,在RDBMS实例中的所有数据库中,尽管我今天正在研究确认这一点(并希望答案是否定的)。
我喜欢Oracle如何更好地处理这个问题。 在直接SQL中,表和列名称等标识符不区分大小写。 但是,如果由于某种原因您真的希望获得显式大小写,则可以将标识符括在双引号中(这在Oracle SQL中与用于包含字符串数据的单引号完全不同)。 所以:
SELECT fieldName
FROM tableName;
将从tablename查询fieldname,但是
SELECT "fieldName"
FROM "tableName";
将从tableName查询fieldName。
我很确定你甚至可以使用这种机制将空格或其他非标准字符插入标识符。
在这种情况下,如果由于某种原因你发现明确的表格和列名称是可取的,你可以使用它,但它仍然是我要高度警告的东西。
我每天使用Oracle时的惯例是,在代码中我会将所有Oracle SQL关键字都设置为大写,所有标识符都设置为小写。 在文档中,我将所有表和列名称放在大写。 能够做到这一点非常方便和可读(虽然有时在代码中键入如此多的大写字母很痛苦 - 我确信我可以找到一个编辑器功能来帮助,这里)。
在我看来,MySQL在不同平台上的差异特别糟糕。我们需要能够在Windows上转储数据库并将它们加载到UNIX中,如果Windows上的安装程序忘记将RDBMS置于区分大小写模式,那么这样做会很麻烦。 (公平地说,这是一场灾难的部分原因是我们的编码员很久以前做出了错误的决定,依赖于UNIX上的MySQL的区分大小写。)编写Windows MySQL安装程序的人员非常方便像Windows一样,很高兴向人们提供一个复选框,说“你想打开严格的模式,让MySQL更符合标准吗?”但是MySQL与标准的区别非常方便,然后通过在不同平台上转换并与其自身的事实标准不同而使事情变得更糟。我敢肯定,在不同的Linux发行版上,这可能会更加复杂,因为不同发行版的打包器可能有时会合并他们自己喜欢的MySQL配置设置。
这是另一个SO问题,可以讨论RDBMS中是否需要区分大小写。