";国家";涉及参数和变量的SAP HANA查询中的字符(unicode)

";国家";涉及参数和变量的SAP HANA查询中的字符(unicode),hana,Hana,为什么在SAP HANA“SQL”查询中为输入参数指定值时,我不能使用N'处理非英语字符,而我可以为输入变量指定值 例如,以下查询可以工作(注意由输入变量生成的WHERE子句中的N'): 但是,如果在CC_PARAM变量的值前面添加N',则会出现语法错误 SELECT "NDATA", "DATA", "CC_NON_ENGLISH" , sum("ID") AS "ID" FROM "_SYS_BIC"."Test/MY_VIEW"

为什么在SAP HANA“SQL”查询中为输入参数指定值时,我不能使用
N'
处理非英语字符,而我可以为输入变量指定值

例如,以下查询可以工作(注意由输入变量生成的
WHERE
子句中的
N'
):

但是,如果在
CC_PARAM
变量的值前面添加
N'
,则会出现语法错误

 SELECT 
        "NDATA", "DATA", "CC_NON_ENGLISH"
      , sum("ID") AS "ID" 
 FROM 
       "_SYS_BIC"."Test/MY_VIEW" 
         ('PLACEHOLDER' = ('$CC_PARAM$', N'दिल्ली भारत की राजधानी है.')) 
 WHERE (("NDATA" IN (N'दिल्ली भारत की राजधानी है.'))) 
 GROUP BY  
         "NDATA", "DATA", "CC_NON_ENGLISH" 
由此产生的错误:

Could not execute 'SELECT "NDATA", "DATA", "CC_NON_ENGLISH", sum("ID") AS "ID" FROM ...' 
 SAP DBTech JDBC: [257]: sql syntax error: 
 incorrect syntax near "दिल्ली भारत की राजधानी है.": line 7 col 3 (at pos 173)
通常,在HANA中编写SQL查询时,Unicode字符串何时需要前面加
N'
,何时不需要


我注意到,我可以在没有任何
N'
的情况下执行有问题的查询,而且它工作正常,所以这里发生了什么?

字符串文本的
N'
修饰符将这些字符串文本标记为SQL的Unicode字符串。这与向字符串提供
TO_NVARCHAR()
几乎相同,因为数据库应该将结果值视为Unicode字符串,除了对于文本版本,客户端保证字符串是Unicode字符串

这是SQL的标准行为

对于SAP HANA specific(读取专有)
占位符
子句(用于提供计算视图参数的值),始终将输入字符串作为Unicode字符串。 此外,它不允许使用
N'
修饰符(或SQL函数)

简而言之:当您想在SQL中指定Unicode字符串文字时,可以/应该使用
N'
修饰符。
使用SAP HANA特定的语法和命令时,总是隐式提供Unicode字符串,并且不能使用
N'
修饰符。

我明白了。因此,我们在WHERE子句中使用的字符串文本(即从输入变量派生的过滤器)允许使用N’的原因是HANA在这里坚持SQL标准。然而,由于
占位符
子句是SAP HANA专有的,HANA团队呼吁偏离标准,因为我们总是将Unicode字符串传递给
占位符
子句(即,这些文本总是Unicode字符串),为什么
中的WHERE((“nda”)也是दिल्ली भारत की राजधानी है.'))) 工作?我不需要明确指定我的筛选字符串文字是unicode,因为这是标准SQL吗?好的,所以对于专有功能,没有标准-总是由实现该功能的供应商决定其工作方式。记住旧的Oracle(+)外部连接语法?同样。至于为什么不需要使用
N'
修饰符:HANA处理字符串类型相当灵活。如果您的客户端软件在没有修饰符的情况下正确处理unicode字符串,HANA不会抱怨。例如,对于基于JAVA/JAVAScript的客户端,没有ASCII字符串对于ODBC,这是不同的,因为客户端处理数据的方式确实不同。当您说它对基于ODBC的客户端有影响时,您的意思是基于ODBC的客户端可以以任何方式表示字符串(即CHAR或WCHAR),因此ODBC客户端在内部需要保持一致?但是,我认为,在向HANA服务器传递字符串时,ODBC客户端仍然可以选择是否包含
N'
,因为HANA在这方面很灵活。
Could not execute 'SELECT "NDATA", "DATA", "CC_NON_ENGLISH", sum("ID") AS "ID" FROM ...' 
 SAP DBTech JDBC: [257]: sql syntax error: 
 incorrect syntax near "दिल्ली भारत की राजधानी है.": line 7 col 3 (at pos 173)