【问题标题】:When and why are Google Cloud Spanner table and column names case-sensitive?Google Cloud Spanner 表名和列名何时以及为何区分大小写?
【发布时间】:2019-06-06 13:13:04
【问题描述】:

Spanner 文档说:

表和列名:

  • 长度可以在 1-128 个字符之间。必须以大写或小写字母开头。
  • 可以包含大小写字母、数字和下划线,但不能包含连字符。
  • 不区分大小写。例如,您不能在同一个数据库中创建名为 mytable 和 MyTable 的表,或者创建名为 mycolumn 和 MyColumn 在同一个表中。

https://cloud.google.com/spanner/docs/data-definition-language#table_statements

鉴于此,我不知道这是什么意思:

表名通常不区分大小写,但也可能区分大小写 查询使用区分大小写的表名的数据库时。

https://cloud.google.com/spanner/docs/lexical#case-sensitivity

其实表名好像是区分大小写的,例如:

如果我们与 UI 中显示的大小写不匹配,查询将失败。

【问题讨论】:

    标签: google-cloud-spanner


    【解决方案1】:

    这似乎是文档中的错误。 Cloud Spanner 中的表名不区分大小写。我会跟进文档团队。

    编辑:更新文档https://cloud.google.com/spanner/docs/data-definition-language#naming_conventions

    【讨论】:

    • 我得到的信息是“Spanner 模式对象名称在 DDL 定义和 INFORMATION_SCHEMA 查询中区分大小写,但对象名称不能仅按大小写不同。Spanner 模式对象名称在 SQL 查询中不区分大小写。原因是允许用户为对象名称选择首选的大写样式,这在 DDL 和 INFORMATION_SCHEMA 中的引用中强制执行。它还消除了查询 INFORMATION_SCHEMA 表时的歧义——用户必须指定确切的大小写或使用不区分大小写的匹配,就像在其他 SQL 查询中匹配时一样”
    • 他们会将其添加到 Google 的文档中吗?我想从我们的文档中链接到那个。
    • 是的,也许不完全是这种说法,但大意是这样的。
    • 你能发个网址吗?
    【解决方案2】:

    我添加了几个例子,所以我们可以看到不同之处。

    表名区分大小写,在这个例子中,没关系,只有一个表:

    示例 1:

    选择 *

    来自名册

    WHERE 姓氏 = @myparam

    返回 LastName 等于查询参数 myparam 的值的所有行。

    但是对于示例 2,如果我们比较两个表,或者使用表进行其他类型的查询。

    选择 ID,名称

    FROM Table1 除了选择 id、name

    从表 2

    它将为您提供 Table1 中的所有内容,而不是 Table2 中的所有内容。

    【讨论】:

    • 我不明白这有什么关系。
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2012-05-13
    • 2017-01-31
    相关资源
    最近更新 更多