我有一个奇怪的情况显示SQL服务器的值。 SQL Server 2008字段中存储了一个值,当从服务器查询并显示在Management Studio中时,该值将被隐藏(见下文)。
测试模板2
但是当在HTML编辑器中显示在屏幕上时,它显示为? (见下文)
测试模板2?
当我检查ascii值时,它显示63.不确定用户如何在SQL服务器中将此特殊值添加到此字段中。当我通过输入测试?进入输入字段并显示它没有任何问题。 我不想盲目地删除此字段中的最后一个字符。我试图确定一个解决方案来识别这个不可见的值,并在存储或显示时删除它。 非常感谢任何解决方案。
如下面的评论所示,结果证明这是Unicode 8203(零宽度空间)。 我的下一个问题是如何在T-SQL中的一个语句中替换此Unicode 8203而不解析每个字符?
答案 0 :(得分:6)
使用REPLACE删除零宽度空格字符:
-- setup unicode string containing zero-width character
DECLARE @UnicodeReplace NVARCHAR(5) = N'Test' + NCHAR(8203);
-- check that unicode string length is 5,
-- and prove existence of zero-width space character matching unicode 8203
SELECT @UnicodeReplace AS String,
LEN(@UnicodeReplace) AS Length,
UNICODE(SUBSTRING(@UnicodeReplace, 5, 1)) AS UnicodeValue
-- replace and prove the unicode string length is reduced to 4
SELECT REPLACE(@UnicodeReplace, NCHAR(8203), N''),
LEN(REPLACE(@UnicodeReplace, NCHAR(8203), N'')) AS Length;
答案 1 :(得分:0)
如果数据库排序规则具有默认值,例如SQL_Latin1_General_CP1_CI_AS,则无法替换这些字符。在这种情况下,该命令可以工作:
set @ word = replace(@word整理Latin1_General_100_BIN2,nchar(8205),N'')