【问题标题】:Can a table field contain a hyphen?表格字段可以包含连字符吗?
【发布时间】:2010-07-02 19:38:41
【问题描述】:

我在 MySQL 表中有一个字段名为“product”的表,并且想将其重命名为“ds-product”。

我使用的 CMS 类型系统使用表单字段的 id 作为要插入的表字段的名称。

对于大多数情况,这可以正常工作,但对于特定字段,它会在我提供的任何 ID 前面加上“ds-”,因此我必须使表字段名称匹配。

但是,当尝试进行查询时,我收到了错误

“字段列表”中的未知列“sales.ds”

有什么方法可以让我拥有一个名为 ds-product 的字段?

【问题讨论】:

  • 这是可能的,但您不想这样做,因为您必须每次将该表名括在数据库的正确引用字符中。您是否考虑过使用下划线?
  • @Charles:你的评论应该是一个答案
  • @Charles:+1,非标准列名应该是你刚才所说的最后手段。

标签: mysql sql database


【解决方案1】:

是的,如果您使用分隔标识符,您可以使用标点符号、空格、国际字符和 SQL 保留字:

SELECT * FROM `my-table`;

在 MySQL 中,使用反引号。在标准 SQL 中,使用双引号。

或者如果你使用 MySQL 你可以设置ANSI_QUOTES SQL mode:

SET SQL_MODE = ANSI_QUOTES;
SELECT * FROM "my-table";

【讨论】:

  • 我实际上无权访问使用的查询。有没有办法让一个名为 ds-product 的字段用于标准查询?
  • 不,连字符是一个运算符,你不能在标识符中间使用它。如果您还有dsproduct 列怎么办?那么ds-product 将是一个算术表达式:一列减去另一列。 SQL 支持分隔标识符,因此您可以解决这种歧义。 FWIW,我根本不知道有任何其他编程语言可以做到这一点!
【解决方案2】:

尝试将括号放在桌面上您的通话的最后部分。在你的情况下:

SELECT * FROM [TABLE-NAME];

请确保只将括号放在表名上。不在它所在的整个数据库上

SELECT * FROM some_database.anotherdatabase.[your-table];

附:也适用于列。

我正在使用 Microsoft SQL Server 管理。

【讨论】:

  • 唉,MS SQL 和 MySQL 是不同的,而且往往需要不同的答案。你不能混合它们。我建议您在获得大量反对票之前删除此答案。
猜你喜欢
  • 2020-06-08
  • 2012-01-05
  • 1970-01-01
  • 2015-11-04
  • 2022-11-30
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
相关资源
最近更新 更多