【问题标题】:SQL Server replace function has odd behavior with unicode modifier characterSQL Server 替换函数具有 unicode 修饰符的奇怪行为
【发布时间】:2016-12-12 05:20:15
【问题描述】:

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

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

按预期返回"",但是

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

返回不受影响的输入字符串:"゚。我相信这是由于 SQL Server 将两个字符序列解释为与 " 本身不同。

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

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

【问题讨论】:

  • select replace(convert(nvarchar(max), N'"゚') COLLATE Latin1_General_BIN, N'"', N'""') 将解决该链接中所述的问题
  • 我运行它在两种情况下都会得到两个双引号。这对我来说似乎是正确的。
  • @GordonLinoff - 可能您的数据库设置为默认排序规则为COLLATE Latin1_General_BIN?
  • 谢谢!排序规则成功了

标签: sql-server unicode utf-16


【解决方案1】:

使用 COLLATE Latin1_General_BIN 处理 Unicode 字符。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2014-01-28
    • 2015-11-17
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2013-06-26
    相关资源
    最近更新 更多