• 在内部,字符串以 UTF-8 编码。 无效(非 UTF8)字符在引入时被替换为 U+FFFD Unicode 替换字符。
  • Kusto 没有与单个字符等效的数据类型。 单个字符表示为长度为 1 的字符串。
  • 引入 string 数据类型时,如果记录中的单一字符串值超过 1MB(使用 UTF-8 编码测量),则截断该值并且引入成功。 如果记录中的单一字符串值或整个记录超过允许的数据上限 64MB,则引入失败。
  • 字符串文本

    有多种方法可以对查询文本中的 string 数据类型的文本进行编码:

  • 将字符串括在双引号中 ( " ): "This is a string literal. Single quote characters (') don't require escaping. Double quote characters (") are escaped by a backslash (\)."
  • 将字符串括在单引号中 ( ' ): 'Another string literal. Single quote characters (') require escaping by a backslash (\). Double quote characters (") do not require escaping.'
  • 在上面的两种表示形式中,反斜杠 ( \ ) 字符表示转义。 反斜杠用于对封闭的引号字符、制表符 ( \t )、换行符 ( \n ) 和它自身 ( \\ ) 进行转义。

    换行符 ( \n ) 和回车符 ( \r ) 不能在不用引号括起来的情况下作为字符串文字的一部分。 另请参阅 多行字符串文本

    逐字字符串文本

    也支持逐字字符串文本。 在这种形式中,反斜杠字符 ( \ ) 代表它自己,而不是转义字符。 将 @ 特殊字符置于字符串字面量之前,会将其视为逐字标识符。

  • 括在双引号中 ( " ): @"This is a verbatim string literal that ends with a backslash\. Double quote characters (") are escaped by a double quote (")."
  • 括在单引号中 ( ' ): @'This is a verbatim string literal that ends with a backslash\. Single quote characters (') are escaped by a single quote (').'
  • 换行符 ( \n ) 和回车符 ( \r ) 不能在不用引号括起来的情况下作为字符串文字的一部分。 另请参阅 多行字符串文本

    拼接字符串文本

    如果两个或多个字符串文本之间没有任何内容,或者它们之间仅用空格和注释分隔,则这些文本会自动联接起来,在查询中形成新的字符串文本。
    例如,以下表达式均产生长度为 13 的字符串:

    print strlen("Hello"', '@"world!"); // Nothing between them
    print strlen("Hello" ', ' @"world!"); // Separated by whitespace only
    print strlen("Hello"
      // Comment
      ', '@"world!"); // Separated by whitespace and a comment
    

    多行字符串文本

    多行字符串文字是指换行符 (\n) 和回车符 (\r) 不需要转义的字符串文字。

  • 多行字符串文本总是出现在两次出现的“三个反撇号弦”(```) 之间。
  • 多行字符串文本不支持转义字符。 与逐字字符串文本类似,多行字符串文本允许换行符和回车符。
  • 多行字符串文本不支持模糊处理。
  • // Simple string notation
    print s1 = 'some string', s2 = "some other string"
    // Strings that include single or double-quotes can be defined as follows
    print s1 = 'string with " (double quotes)',
              s2 = "string with ' (single quotes)"
    // Strings with '\' can be prefixed with '@' (as in c#)
    print myPath1 = @'C:\Folder\filename.txt'
    // Escaping using '\' notation
    print s = '\\n.*(>|\'|=|\")[a-zA-Z0-9/+]{86}=='
    // Encode a C# program in a Kusto multi-line string
    print program=```
      public class Program {
        public static void Main() {
          System.Console.WriteLine("Hello!");
    

    可见,将字符串括在双引号 (") 中时,单引号 (') 字符不需要转义,反之亦然。 此方法可以更轻松地根据上下文引用字符串。

    经过模糊处理的字符串文本

    系统跟踪查询并将其存储起来以用于遥测和分析。 例如,可能会向群集所有者提供查询文本的访问权限。 如果查询文本包含机密信息(例如密码),则可能会泄漏应保密的信息。 为了防止发生此类泄漏,查询作者可以将特定的字符串文本标记为经过模糊处理的字符串文本。 查询文本中的此类文本会自动替换为一些星号 (*) 字符,这样它们便不能用于稍后的分析。

    将所有包含机密信息的字符串文本标记为经过模糊处理的字符串文本。

    可以通过采用“常规”字符串文本并在其前面加上 hH 字符来形成经过模糊处理的字符串文本。

    h'hello'
    h@'world'
    h"hello"
    

    在许多情况下,只有一部分字符串文本是机密的。 在这些情况下,将文本拆分为非机密部分和机密部分。 然后,仅将机密部分标记为模糊处理。

    print x="https://contoso.blob.core.windows.net/container/blob.txt?"
      h'sv=2012-02-12&se=2013-04-13T0...'