涉及参数和变量的 SAP HANA 查询中的 "national" 字符(unicode)
The "national" character (unicode) in SAP HANA queries involving parameters and variables
为什么在 SAP HANA "SQL" 查询中为输入参数指定值时我不能使用 N'
处理非英语字符,而我可以为输入变量处理?
例如,以下查询有效(注意输入变量生成的 WHERE
子句中的 N'
):
SELECT
"NDATA", "DATA", "CC_NON_ENGLISH"
, sum("ID") AS "ID"
FROM
"_SYS_BIC"."Test/MY_VIEW"
('PLACEHOLDER' = ('$CC_PARAM$', 'दिल्ली भारत की राजधानी है.'))
WHERE
(("NDATA" IN (N'दिल्ली भारत की राजधानी है.')))
GROUP BY
"NDATA", "DATA", "CC_NON_ENGLISH"
但是,如果我在 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 字符串。在数据库应将结果值视为 Unicode 字符串的意义上,这与使用 TO_NVARCHAR()
提供字符串几乎相同,除了对于文字版本,客户端保证该字符串是 Unicode 字符串。
这是 SQL 标准行为。
对于 SAP HANA 特定的(阅读 专有)PLACEHOLDER
子句(用于提供计算视图参数的值)始终将输入字符串作为 Unicode 字符串。
此外,它不允许使用 N'
修饰符(或 SQL 函数)。
简而言之:当您想在 SQL 中指定 Unicode 字符串文字时,您 can/should 使用 N'
修饰符。
当您使用 SAP HANA 特定语法和命令时,您总是隐式提供一个 Unicode 字符串并且不得使用 N'
修饰符。
为什么在 SAP HANA "SQL" 查询中为输入参数指定值时我不能使用 N'
处理非英语字符,而我可以为输入变量处理?
例如,以下查询有效(注意输入变量生成的 WHERE
子句中的 N'
):
SELECT
"NDATA", "DATA", "CC_NON_ENGLISH"
, sum("ID") AS "ID"
FROM
"_SYS_BIC"."Test/MY_VIEW"
('PLACEHOLDER' = ('$CC_PARAM$', 'दिल्ली भारत की राजधानी है.'))
WHERE
(("NDATA" IN (N'दिल्ली भारत की राजधानी है.')))
GROUP BY
"NDATA", "DATA", "CC_NON_ENGLISH"
但是,如果我在 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 字符串。在数据库应将结果值视为 Unicode 字符串的意义上,这与使用 TO_NVARCHAR()
提供字符串几乎相同,除了对于文字版本,客户端保证该字符串是 Unicode 字符串。
这是 SQL 标准行为。
对于 SAP HANA 特定的(阅读 专有)PLACEHOLDER
子句(用于提供计算视图参数的值)始终将输入字符串作为 Unicode 字符串。
此外,它不允许使用 N'
修饰符(或 SQL 函数)。
简而言之:当您想在 SQL 中指定 Unicode 字符串文字时,您 can/should 使用 N'
修饰符。
当您使用 SAP HANA 特定语法和命令时,您总是隐式提供一个 Unicode 字符串并且不得使用 N'
修饰符。