";国家";涉及参数和变量的SAP HANA查询中的字符(unicode)
为什么在SAP HANA“SQL”查询中为输入参数指定值时,我不能使用";国家";涉及参数和变量的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"
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)