无法使用特殊字符更新varchar列

时间:2013-08-08 22:03:40

标签: sql-server tsql sql-server-2005

最初我认为此问题与C#TransactionScopeDapper.NET有关。但是因为我已经在SSMS中测试了sql,问题仍然存在,我认为这是一个纯粹的SQL问题。

这是应该更新varchar(40)列的(简化)更新。我没有收到任何错误,行数为1.旧SparePartDescriptionEC801/¦USB/Exch Acc/JP/PE bag

declare @rowCount int  

UPDATE [tabSparePart] SET 
    [SparePartDescription] = 'EC801/╡USB/Exch Acc/JP/PE bag'
WHERE ([idSparePart] = 13912)

set @rowCount = @@ROWCOUNT
select @rowCount  

唯一的区别是这些特殊字符:¦

也许您已经知道为什么我无法更新此专栏。

1 个答案:

答案 0 :(得分:4)

嗯,你正在使用的特殊角色:

ASCII不支持。参见:

DECLARE @x VARCHAR(32) = 'EC801/╡USB/Exch Acc/JP/PE bag';
SELECT @x;

结果:

EC801/¦USB/Exch Acc/JP/PE bag

所以更新工作正常,从技术上讲,它只是没有做你想要的,因为为了适应ASCII空间,它必须用你的角色代替有效的角色。

为了支持该字符,您必须为您的列使用Unicode(可能是特定的排序规则,我不确定)。这很好用:

DECLARE @x NVARCHAR(32) = N'EC801/╡USB/Exch Acc/JP/PE bag';
SELECT @x;

结果:

EC801/╡USB/Exch Acc/JP/PE bag

在包含此类字符的字符串文字中指定N前缀非常重要...