sql-server - 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
解决方案
对于某些字符,有几种方法可以将它们编码为 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ó'
并且结果是正确的),因此这并不是您一开始可能想的那么大的问题。
推荐阅读
- google-apps-script - Google Apps 脚本发送附件
- javascript - 恢复失败的赛普拉斯测试
- javascript - 创建使用 nodejs 或 express [前端和后端] 过期的下载链接的代码
- flutter - Intellisense 不适用于 android studio 中的颤振插件项目
- textures - Mfcc 特征提取
- r - 如何根据 R 中另一个数据框中的值过滤数据框
- reactjs - 在 Cypress 中加载 PDF 文件失败
- rust - 找不到匹配的包
- python - attrs 包是否有“on_getattr”等效功能?
- flutter - 如何重新发送dio请求,取消先前的请求并再次发送