一周前我什至都不知道 Unicode 替换字符 (�) 的存在。现在我了解到至少在 SQL 中似乎有一些非常特殊和奇怪的逻辑围绕着它。例如:
select replace(N'bl' + NCHAR(65533) + N'rt', NCHAR(65533), N'X')
返回 bl�rt 而不是 blXrt。并且:
select CHARINDEX(NCHAR(65533), N'b' + NCHAR(65533) + N't')
返回 0 而不是 2。我只是想确定表中的哪些字符串包含此字符,但我找不到直接的方法来执行此操作。这个角色的处理如此奇怪,一定还有更多我可以学习的地方。行为在哪里定义,更具体地说,在 MS SQL Server 数据库中查找包含此字符的字符串的最简单方法是什么?
编辑 对于任何尝试答案的人,我建议使用以下数据测试您的答案:
create table Test([Value] nvarchar(100) not null)
insert into Test([Value]) values('b' + NCHAR(65533) + 't')
insert into Test([Value]) values('b?t')
insert into Test([Value]) values('bat')
最佳答案
Krzysztof Kozielczyk 写道,有效的 unicode 字符需要转换为二进制字符串才能进行替换,因此这可能是您最初问题的答案。
SELECT REPLACE(N'test' + NCHAR(65533)
COLLATE Latin1_General_BIN, NCHAR(65533) COLLATE Latin1_General_BIN, '')
上面的代码还指出了如何查找具有有效 unicode 字符的字符串,但它是一种解决方法,而不是解决方案。 source
关于sql - 如何在 SQL 中处理 Unicode 替换字符 � (0xFFFD/65533),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240308/