NCHAR(1600) 的替换在 SQL 服务器上不起作用
Replace of NCHAR(1600) is not working on SQL Server
当我运行下面的代码时,NCHAR(1600)
没有被替换
SELECT REPLACE(N'foo' + NCHAR(1600), NCHAR(1600), '**') --> output: fooـ
- 我的数据库排序规则是
Persian_100_CI_AI
- SQL 服务器的默认排序规则也是
Persian_100_CI_AI
- 我的 SQL 服务器版本是
Microsoft SQL Server 2017 (RTM-CU3-GDR) (KB4052987) - 14.0.3015.40 (X64)
有谁知道是什么问题吗?
某些字符在某些排序规则中匹配不佳。因此,有些人会在不相同的情况下与其他人进行匹配,而其他人可能最终无法匹配。
REPLACE
使用排序规则,因此似乎无法匹配相同字符。在这种情况下,通常会在 REPLACE
内使用不同的排序规则,如果您需要 return 原始排序规则,请在外部再次使用 COLLATE
:
SELECT REPLACE(N'foo' + NCHAR(1600) COLLATE Persian_100_BIN, NCHAR(1600), '**') COLLATE Persian_100_CI_AI;
我们也可以使用 REPLICATE,而不是在高层编写排序规则,只需要在 N'foo' 值之后连接 * 对吗?
SELECT CONCAT(N'foo',REPLICATE('*',1600))
当我运行下面的代码时,NCHAR(1600)
没有被替换
SELECT REPLACE(N'foo' + NCHAR(1600), NCHAR(1600), '**') --> output: fooـ
- 我的数据库排序规则是
Persian_100_CI_AI
- SQL 服务器的默认排序规则也是
Persian_100_CI_AI
- 我的 SQL 服务器版本是
Microsoft SQL Server 2017 (RTM-CU3-GDR) (KB4052987) - 14.0.3015.40 (X64)
有谁知道是什么问题吗?
某些字符在某些排序规则中匹配不佳。因此,有些人会在不相同的情况下与其他人进行匹配,而其他人可能最终无法匹配。
REPLACE
使用排序规则,因此似乎无法匹配相同字符。在这种情况下,通常会在 REPLACE
内使用不同的排序规则,如果您需要 return 原始排序规则,请在外部再次使用 COLLATE
:
SELECT REPLACE(N'foo' + NCHAR(1600) COLLATE Persian_100_BIN, NCHAR(1600), '**') COLLATE Persian_100_CI_AI;
我们也可以使用 REPLICATE,而不是在高层编写排序规则,只需要在 N'foo' 值之后连接 * 对吗?
SELECT CONCAT(N'foo',REPLICATE('*',1600))