SQL 服务器替换函数具有带有 unicode 修饰符的奇怪行为

SQL Server replace function has odd behavior with unicode modifier character

我的数据中有一些半角 unicode 字符(特别是 U+FF9F),它们似乎干扰了 replace 函数:

select replace(convert(nvarchar(max), N'"'), N'"', N'""')

returns "" 符合预期,但是

select replace(convert(nvarchar(max), N'"゚'), N'"', N'""')

returns 输入字符串不受影响:"゚。我相信这是由于 SQL 服务器将双字符序列解释为不同于 " 本身。

有没有办法让 replace 函数用两个替换双引号字符?

编辑:这个问题与 Replacing a specific Unicode Character in MS SQL Server 中的答案略有不同。那个问题问的是去掉一个半角字符,而这个问题是关于修改一个半角字符旁边的一个字符。在这两个问题中,都需要将排序规则设置为 Latin1_General_BIN

使用 COLLATE Latin1_General_BIN 处理 Unicode 字符。

SELECT REPLACE(CONVERT(nvarchar(max), N'"゚') COLLATE Latin1_General_BIN, N'"', N'""')