【问题标题】:Are column and table name case sensitive in MySQL?MySQL 中的列名和表名是否区分大小写?
【发布时间】:2011-01-01 19:32:13
【问题描述】:

如果我有一个名为category_idCategory_Id 的列名,它们是否不同?

如果我有名为categoryCategory 的表,它们有什么不同吗?

【问题讨论】:

    标签: mysql collation case-sensitive


    【解决方案1】:

    在 Unix 上,表名区分大小写。在 Windows 上,它们不是。有趣,不是吗?有点像他们各自的文件系统。你认为这是巧合吗?

    换句话说,如果您在 Windows 上进行开发但计划部署到 Linux 机器上,最好也针对基于 Linux 的 MySQL 测试您的 SQL,或者在生产时为神秘的“未找到表”错误做好准备。现在虚拟机很便宜。

    字段(列)名称不区分大小写。

    编辑:我们谈论的是 MySQL 服务器机器上的操作系统,而不是客户端。

    【讨论】:

    • 来自 MySQL 文档:尽管在某些平台上数据库和表名不区分大小写,但您不应在同一语句中使用不同大小写来引用给定的数据库或表。以下语句不起作用,因为它同时将表称为 my_table 和 MY_TABLE:SELECT * FROM my_table WHERE MY_TABLE.col=1;,非常正确,但在任何情况下都应视为区分大小写...
    • 每个表(不管是什么引擎)都有一个对应的.frm文件来存储数据结构。由于表名和文件名相同,所以表的大小写敏感性完全取决于服务器上文件系统的大小写敏感性。
    • @DavidM,该查询对我有用。您使用的是哪个文件系统?
    • 我认为这个答案可能会让读者感到困惑!表列不区分大小写,这意味着 Sizesize 是同一列。 INSERT INTO table_name (SIZE, gender) VALUES (123, 456);将成功插入sizeGeNdEr列中的值
    • 这正是我在倒数第二段中所说的。 “字段”和“列”是一回事。
    【解决方案2】:

    奇怪的是,即使在 Windows 上,它似乎在 MySQL Workbench 中也是区分大小写的。

    我们只是试图更改 SELECT 语句的结果,但 Workbench 不允许我们这样做,抱怨我们的查询不包含表的主键(它确实包含但小写),因此结果被读取 -只要。在正确的情况下使用主键(ID 而不是 id)运行相同的查询将使我们能够按预期编辑结果。

    【讨论】:

      【解决方案3】:

      来自 MySQL documentation

      数据库和表名在 Windows 中不区分大小写,并且大小写 在大多数 Unix 版本中都很敏感。一个值得注意的例外是 Mac OS X,它基于 Unix,但使用默认的文件系统类型 (HFS+) 不区分大小写。

      列名和索引名在任何平台上都不区分大小写,列别名也不区分。

      【讨论】:

        【解决方案4】:

        对于数据库和表名,取决于底层操作系统。 见8.2.2. Identifier Case Sensitivity

        【讨论】:

          猜你喜欢
          • 2011-09-02
          • 2014-01-19
          • 2017-01-31
          • 2012-03-15
          相关资源
          最近更新 更多