替换 NCHAR(1600) 在 SQL Server 上不起作用

Fre*_*red 1 t-sql sql-server sql-server-2017 sql-server-collation

当我运行以下代码时,NCHAR(1600)不会被替换

\n\n
SELECT REPLACE(N'foo' + NCHAR(1600), NCHAR(1600), '**') --> output: foo\xd9\x80\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 我的数据库排序规则是Persian_100_CI_AI
  • \n
  • SQL Server的默认排序规则Persian_100_CI_AI
  • \n
  • 我的 SQL 服务器版本是Microsoft SQL Server 2017 (RTM-CU3-GDR) (KB4052987) - 14.0.3015.40 (X64)
  • \n
\n\n

有谁知道是什么问题?

\n

use*_*983 5

某些字符在某些排序规则中匹配得不好。因此,有些人在不相同时会与其他人进行匹配,而另一些人即使相同也可能最终无法匹配。

REPLACE使用排序规则,因此看起来相同字符的匹配不起作用。在这种情况下,通常会在 内部使用不同的排序规则REPLACE,如果需要返回原始排序规则,请COLLATE在外部再次使用:

SELECT REPLACE(N'foo' + NCHAR(1600) COLLATE Persian_100_BIN, NCHAR(1600), '**') COLLATE Persian_100_CI_AI;
Run Code Online (Sandbox Code Playgroud)