首页 > 解决方案 > Len 函数:unicode 字符计为 2

问题描述

请为我解释为什么下面的字符串长度是 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 

标签: sql-servertsqlunicode

解决方案


对于某些字符,有几种方法可以将它们编码为 Unicode。
在这种情况下,“ó”可以是 U+00F3(一个 16 位值)或 U+006F U+0301(两个 16 位值)。这些形式在规范上是等效的。

如果您想阅读更多内容,请参阅 Microsoft 的Using Unicode Normalization to Represent Strings

不幸的是,在 T-SQL 中没有办法将字符串从一种形式转换为另一种形式。另请参阅SQL Server 中的规范化 unicode 字符串之类的问题?

但好消息是,由于它们在规范上是等价的,因此它们在 T-SQL 中的比较相同(您可以编写N'Không có'=N'Không có'并且结果是正确的),因此这并不是您一开始可能想的那么大的问题。


推荐阅读