请为我解释为什么下面的字符串的长度是9而不是8?
DECLARE @nstring NVARCHAR(100)
SET @nstring =N'Không có'
Print len(@nstring) -- 9
SET @nstring =N'Không co'
Print len(@nstring) -- 8
答案 0 :(得分:2)
对于某些字符,有几种方法可以将它们编码为Unicode。
在这种情况下,“ó”可以是U + 00F3(一个16位值)或U + 006F U + 0301(两个16位值)。这些形式在规范上是等效的。
如果您想阅读更多,请使用Microsoft的Using Unicode Normalization to Represent Strings。
不幸的是,在T-SQL中无法将字符串从一种形式转换为另一种形式。另请参阅类似Normalize unicode string in SQL Server?
的问题但是好消息是,因为它们在规范上是等效的,所以它们在T-SQL中进行了比较(您可以编写N'Không có'=N'Không có'
并且结果为true),所以这并不是您认为的那么大的问题首先。
答案 1 :(得分:1)