跳转至

字符串

NebulaGraph 支持定长字符串和变长字符串。

声明与表示方式

nGQL 中的字符串声明方式如下:

  • 使用关键字STRING声明变长字符串。
  • 使用关键字FIXED_STRING(<length>)声明定长字符串,<length>为字符串长度,例如FIXED_STRING(32)

字符串的表示方式为用双引号或单引号包裹,例如"Hello, Cooper"'Hello, Cooper'

字符串读写

nGQL 支持以如下方式使用字符串:

  • VID 的数据类型定义为定长字符串。
  • 将变长字符串设置为 Schema 名称,包括图空间、Tag、Edge type 和属性的名称。
  • 将属性值的数据类型定义为定长或变长字符串。

例如:

  • 将属性值的类型定义为定长字符串
    nebula> CREATE TAG IF NOT EXISTS t1 (p1 FIXED_STRING(10)); 
    
  • 将属性值的类型定义为变长字符串
    nebula> CREATE TAG IF NOT EXISTS t2 (p2 STRING); 
    

如果尝试写入的定长字符串超出长度限制:

  • 当该定长字符串为属性值时,写入会成功,NebulaGraph 将截断字符串,仅存入符合长度限制的部分。
  • 当该定长字符串为 VID 时,写入会失败,NebulaGraph 将报错。

转义字符

字符串中不支持直接换行,可以使用转义字符实现,例如:

  • "\n\t\r\b\f"
  • "\110ello world"

OpenCypher 兼容性

openCypher、Cypher 和 nGQL 之间有一些细微区别,例如下面 openCypher 的示例,不能将单引号替换为双引号。

# File: Literals.feature
Feature: Literals

Background:
    Given any graph
 Scenario: Return a single-quoted string
    When executing query:
      """
      RETURN '' AS literal
      """
    Then the result should be, in any order:
      | literal |
      | ''      |    # Note: it should return single-quotes as openCypher required.
    And no side effects

Cypher 的返回结果同时支持单引号和双引号,nGQL 遵循 Cypher 的方式。

nebula > YIELD '' AS quote1, "" AS quote2, "'" AS quote3, '"' AS quote4
+--------+--------+--------+--------+
| quote1 | quote2 | quote3 | quote4 |
+--------+--------+--------+--------+
| ""     | ""     | "'"    | """    |
+--------+--------+--------+--------+

最后更新: August 14, 2023